2012-03-19 9 views
1

私はListViewで使用される行のレイアウトを持っています。レイアウトには約8個のTextViewsが含まれています。ViewGroupのすべての子のフォント色を変更する方法と、ViewGroupインスタンスごとに異なる方法はありますか?

行がタイプ「A」のデータを表している場合は、すべてがTextViewsの明るいグレーのフォント色の赤い背景が必要です。データのタイプが「B」の場合は、背景色を緑、フォント色を黒にします。

今私はカスタムListAdapterを持っていて、getView()メソッドでは、私はプログラムでそれぞれTextViewのフォント色を変更していますが、それは非常に面倒です。

"A"と "B"のスタイルを定義すると考えましたが、プログラムでスタイルを適用する方法はないようです(つまり、XMLレイアウトでのみ静的に行うことができます)。

私はまた、 "A"と "B"のレイアウトが違うと考えましたが、2つのXMLファイルに重複したコードを持つことは望ましくありません。

これを行うには良い方法がありますか?

+0

現在変更しているコードを表示できますか? – Maximus

答えて

0

This post行の色を交互にする方法を示します。

基本的には、条件に基づいて一部のUIコンポーネントを変更するようにgetviewを実装します。

ポストからコードを変更して使用することができます。

+0

これは基本的に私の質問では、カスタムListAdapterを実装し、getView()メソッドをオーバーライドしたことです。私の主な問題は、背景色ではありません...実際の問題は、8つのTextViewのフォント色を変更することです。 – jfritz42

0

私はこれを行うためのまともな方法を見つけることができませんでした。幸いにも、私はButter Knifeライブラリを使用しており、グループ表示機能を使用することができます:

複数のビューをリストまたは配列にグループ化できます。

@Bind({ R.id.first_name, R.id.middle_name, R.id.last_name }) List<TextView> nameViews; 

アクションとセッターのインターフェイスは、単純な動作を指定することができます。

static final ButterKnife.Setter<TextView, Integer> SET_COLOR = new ButterKnife.Setter<TextView, Integer>() { 
     @Override 
     public void set(TextView view, Integer value, int index) { 
      view.setTextColor(value); 
     } 
    }; 

適用方法は、あなたが一度にリスト内のすべてのビューに基づいて行動することができます。

ButterKnife.apply(nameViews, SET_COLOR, ContextCompat.getColor(getContext(), android.R.color.primary_text_light)); 
関連する問題