将TextView颜色设置为<selector>以编程方式</selector>

时间:2011-04-12 23:40:53

标签: android android-resources

我在 res / color / redeemlist_item_color.xml 下的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。当我将此android:textColor上的TextView设置为XML中的上述选择器时,选择该项时颜色会正确更改。但是,我尝试以下列方式以编程方式设置此资源:

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

以这种方式设置时,颜色不再变化。可以用这种方式将选择器分配给TextView吗?

4 个答案:

答案 0 :(得分:40)

您必须使用getColorStateList()

我也在努力解决这个问题,如果你想使用state list,你需要在color资源文件夹而不是drawable文件夹中声明它,并且使用setTextColor(getResources().getColorStateList(R.color.redeemlist_item_color))

答案 1 :(得分:37)

我认为您可能需要添加findViewById或其他类似的内容


编辑:根据我的评论,上面的内容不正确

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

答案 2 :(得分:4)

您可以尝试:

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

而不是:

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

答案 3 :(得分:0)

拉斯曼是对的。你需要给TextView一个ID,android:id =“@ + / something”。您使用该ID和findViewById检索对该特定内容的引用,然后您可以设置文本颜色。