6

クライアントごとに異なる色と画像をテーマにしたアプリケーションを開発しています。ビルド時に、colors.xml ファイルをカスタム カラーで書き直すオプションがありますが、実行時に色を設定する方向に傾いています。私が疑問に思っているのは、colors.xml ファイルで定義された色の値をプログラムで変更し、レイアウト定義で使用されているすべての場所でその新しい値を有効にする方法があるかどうかです。

つまり、私が持っている場合:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <color headerColor="white">#FFF</color>
    <color backgroundColor="black">#000</color>
</resources>

そして、次のようなレイアウトファイル:

<TextView
        android:id="@+id/listItemHeaderActivity"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:textColor="@color/headerColor"
        android:background="@color/backgroundColor"
        android:text="@string/listTextHeaderActivity"/>

headercolorJava でandの値を変更して、backgroundColorそれらの値を使用するすべてのビューで変更することはできますか? または、それらのビューを表示するたびに、関連する各ビューの色を個別に変更する必要がありますか?

前もって感謝します。

4

2 に答える 2

1

この動的な色を使用する理由と方法、およびビルド時ではなく実行時にこれを行う理由を説明すると役立ちます。しかし、それがあなたが尋ねた方法でなければならないと仮定すると...

すべての場所で呼び出して設定できるヘルパー関数を作成することをお勧めします。

public int getMyColor(...) {
    // figure out which color to use, via a database call,
    // an asset load, some algorithm, or whatever you need
    ...

    // once color chosen, create an RGBA integer for it
    final int myColor = ...

    return myColor;
}

これを必要とするすべてのアクティビティ/フラグメントでこれを呼び出し、必要に応じて適切なビューに色属性を設定します。( 等付View.setBackgroundColor(...)

ただし、これを XML 設定や開発レイアウト プレビューで機能させるには、そのヘルパー関数を呼び出すカスタム ビュー クラスも作成する必要があります。この色をどこでどのように使用するかによっては、価値がない場合があります。

このソリューションはあまり洗練されておらず、このカスタム getMyColor ヘルパー関数を必要とするすべてのアクティビティ/フラグメントで何度も呼び出す必要があります。ただし、1 か 2 か所しか設定されていない場合は、おそらく大したことではありません。繰り返しますが、私たちにその方法を尋ねるのではなく、なぜこれをしたいのかを知ることで、より良い代替案が得られるかもしれません.

たとえば、これはあなたの質問に対する回答ではありませんが、テーマについて考えたことはありますか? 上記のすべてが必要でない限り、ビルド時にそれらを設定しなければならないという問題はまだありますが、この色をどのように使用しているかによっては、上で概説した混乱よりも良いかもしれません.

于 2013-06-24T18:09:22.997 に答える