2013年11月6日水曜日

【Android】ビューの背景や文字をタッチした時だけ変更する(on Java)

こんなの簡単やろーと思っていたら
案外ハマってしまったのでポスト.

しかも調べてもレイアウトをxmlで記述する方法ばかりで
Javaで記述する方法は出てこない.

TextViewなどのViewで
背景と文字をタッチしている時だけ変更する…

xmlからだと
android:text_color
android:backgruond
で処理できるのだが,
ソースから実現しようとするといろいろとこんがらがった.

色はリソースファイルで持たせている.
これはxml.
selectorを使った色をjavaでどう受けるのかというのがポイント.
まずはリソースファイル.

文字色
/res/color/general_color_text_menu.xml

背景色
/res/color/general_color_bg_menu.xml

文字色と背景色とで記述方法が違うのに注意
文字色は<item>タグだけで記述するが,
背景色は<color>タグを<item>タグでラップする必要がある.

なお,今回はandroid:colorの値もリソースファイルを指定しているが,
値指定("#000000"みたいなの)でも問題ない.

で,じつは悩んだわりには難しくなかった.
受けるjavaは以下のように記述すればいい.

背景色をgetDrawable()で受けて,
文字色をgetColorStateList()で受けている.

文字色と背景色とでxmlの記述方法が違うのは
そこらへんの違いなのかもしれない.