涙目ブログ

アクセスカウンタ

zoom RSS androidのListViewの文字色を動的に変更する

<<   作成日時 : 2011/09/27 18:34   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 9 / トラックバック 3 / コメント 3

めんどくさいですね(T_T)
TextViewには文字色を変更するAPIがあるので、ListViewも同じだと思ったら
1行程度の追加ではできないようです。

XMLで静的に色を設定するのと違い、動的に変更するには
androidが提供しているJavaのAPIを使用する必要があります。
ところが、ListViewにはそのようなAPIがないので、以下の対応が必要になります。

1.ArrayAdapter<T>を継承したクラスを作成する。
2.上記のクラスに文字色を設定するAPIを追加し、文字色を保持するように作成する。
3.上記のクラスでgetViewメソッドをオーバーライドし、TextViewを引数から取得し、
  文字色を変える。
4.上記のアダプタクラスをListView#setAdapterで設定する。

ちなみにArrayAdapterにandroid.R.layout.simple_list_item_1を使用している場合は、
android.R.id.text1というIDのTextViewが上記の3.で取得できるので、
独自でXMLを作成する必要はありません。

それから、大部分の挙動はArrayAdapterクラスにやらせるので、
コンストラクタやgetView作成時にはsuperを忘れないようにして下さい。


めんどくさいですけど、これは3.のgetViewが
画面に表示されるときのみ呼ばれるので、
何千行のリストでも、画面表示する項目に対してのみメモリが
使用され、効率よくメモリを使用するために必要なのだそうです。
内部でフライウェートパターンでも持っているのでしょう。

(2011年11月4日 追記)
ArrayAdapterを継承したクラスについてサンプルソースを貼ります。
動作確認もコンパイルもしてませんが、イメージをつかんで頂ければ幸いです。
(T_T)

----------------------------------------------------
public class ArrayAdapterSample<T> extends ArrayAdapter<T> {

private int mTextColor;
private int mBgColor;

public ArrayAdapterSample( Context context,
int textViewResourceId,
List<T> objects,
int textColor,
int bgColor ) {
super( context, textViewResourceId, objects );
mTextColor = textColor;
mBgColor = bgColor;
}

public void setTextColor( int bg, int fg ) {
mTextColor = fg;
mBgColor = bg;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView( position, convertView, parent );

TextView tv = (TextView)v.findViewById( android.R.id.text1 );
tv.setTextColor( mTextColor );
tv.setBackgroundColor( mBgColor );
return v;
}
}
----------------------------------------------------

上記クラスのオブジェクトをListView#setAdapterで設定し、
ArrayAdapterSample#setTextColorで色を指定すれば、動的にリストの文字色が変更できます。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 9
なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
面白い
ナイス

トラックバック(3件)

タイトル (本文) ブログ名/日時
paintの色を指定する
Viewクラスのpaintではpaint.setColor(); を指定することで簡単に色の変更ができます 使用できる色は以下の通りです Color.BLACK Color.BLUE Color.CYAN Color.DKGRAY Color.GRAY Color.GREEN Color.LTGRAY Color.MAGENTA Color.RED Color.TRANSPARENT Color.WHITE Color.… ...続きを見る
初心者の初心者のためのAndroidアプ...
2012/03/28 16:32
大同化?培?
http://hi.baidu.com/dtdear3 大同 ...続きを見る
大同化?培?
2013/05/21 03:07
オークリー サングラス
androidのListViewの文字色を動的に変更する 涙目ブログ/ウェブリブログ ...続きを見る
オークリー サングラス
2013/07/05 18:33

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(3件)

内 容 ニックネーム/日時
こんちには。
ListViewの動的な文字色変更がうまく実装できずに困っております。
よろしければ、具体的なソースを見せて頂けませんでしょうか?
よろしくお願いいたします。
いなら
2011/10/25 23:13
いなら様

コメントをありがとうございます。
手順の1〜4の通り作成すればできるはずです。
具体的なソースですが、1〜3のサンプルを本文に記載します。
どこまでできているのかも、要件も分からないので、
あとは工夫をしてみてください。
T_T
2011/11/04 10:16
T_T様

返信が遅くなってしまいました。申し訳ありません。
ソースを掲載して頂きありがとうございました。
無事、文字色を変更する事ができました!
どうやらsetTextViewに対して、color.xmlで定義した色のリソースIDを渡していたのが悪かったみたいです。
setTextView(R.color.customColor)とかやってました……
いなら
2012/02/03 23:02

コメントする help

ニックネーム
本 文
androidのListViewの文字色を動的に変更する 涙目ブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる