web-dev-qa-db-ja.com

プログラムでTextViewの色を<selector>に設定する

次のセレクターがXMLファイルでres/color/redeemlist_item_color.xmlに定義されています。

<?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

      <item Android:state_pressed="true"
            Android:color="#FFFFFF" /> <!-- pressed -->

      <item Android:state_selected="true"
            Android:color="#FFFFFF" /> <!-- focused -->

      <item Android:color="#000000" /> <!-- default -->

   </selector>

TextViewアイテムレイアウトにListViewもあります。このTextViewAndroid:textColorをXMLで上記のセレクターに設定すると、アイテムが選択されたときに色が正しく変更されます。ただし、このリソースをプログラムで次のように設定しようとしています。

holder.label.setTextColor(R.color.redeemlist_item_color);

このように設定すると、色が変化しなくなります。この方法でセレクターをTextViewに割り当てることはできますか?

25
Neil Goodman

findViewByIdまたはその種類のものを追加する必要があるかもしれないと思います


編集:私のコメントによると、上記は正しくありません正しい答えは

setTextColor(getResources().getColorStateList(R.color.redeemlist_item_color));
45
Rasman

getColorStateList() を使用する必要があります

私もこの問題に苦労していました。_state list_を使用する場合は、colorフォルダーではなくdrawableリソースフォルダーで宣言して使用する必要があります。 setTextColor(getResources().getColorStateList(R.color.redeemlist_item_color))

41
ffleandro

あなたが試すことができます:

holder.label.setTextColor(getResources()。getColor(R.color.redeemlist_item_color));

の代わりに :

holder.label.setTextColor(R.color.redeemlist_item_color);

4
sahana uday

ラスマンは正しいです。 TextViewにID、Android:id = "@ +/something"を指定する必要があります。そのIDとfindViewByIdを使用してその特定の参照を取得し、テキストの色を設定できます。

0
HD_Mouse