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

Nei*_*man 24 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>
Run Code Online (Sandbox Code Playgroud)

我也有TextView一个ListView项目布局.当我设置android:textColor在此TextView以XML上述选择器,然后正确的颜色变化时,选择的项目.但是,我试图以下列方式以编程方式设置此资源:

holder.label.setTextColor(R.color.redeemlist_item_color);
Run Code Online (Sandbox Code Playgroud)

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

Ras*_*man 42

我想你可能需要添加findViewById或者那种变化


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

setTextColor(getResources().getColorStateList(R.color.redeemlist_item_color));
Run Code Online (Sandbox Code Playgroud)

  • @Rasman:这不正确,应该使用**setTextColor(getResources().getColorStateList(R.color.redeemlist_item_color));** (26认同)
  • 让我重新说一下:你需要将R.转换为值.我认为正确的功能是getViewbyid.我错了...试试这个:setTextColor(getResources().getColor(R.color.redeemlist_item_color)); (2认同)

ffl*_*dro 41

你必须使用getColorStateList()

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