如何使用setTextColor设置文本颜色(ColorstateList颜色)

时间:2011-07-13 12:15:56

标签: android textcolor

我需要在状态改变时更改文字颜色(按下,对焦)......

如何使用TextView设置ColorsStateList的文字颜色?

编辑,已解决:

textView.setTextColor(new ColorStateList(
   new int [] [] {
      new int [] {android.R.attr.state_pressed},
      new int [] {android.R.attr.state_focused},
      new int [] {}
   },
   new int [] {
      Color.rgb (255, 128, 192),
      Color.rgb (100, 200, 192),
      Color.White
   }
));

解决方案2

textView.setTextColor(getResources().getColorStateList(R.color.your_colors))

Change Background Color of TextView on Click

3 个答案:

答案 0 :(得分:77)

如果您需要在代码中设置颜色(使用ColorStateList),但仍希望将颜色状态保留在XML中,则可能需要使用它:

try {
    XmlResourceParser parser = getResources().getXml(R.color.your_colors);
    ColorStateList colors = ColorStateList.createFromXml(getResources(), parser);
    mText.setTextColor(colors);
} catch (Exception e) {
    // handle exceptions
}

RES /颜色/ your_colors.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="#222222"/>
    <item android:state_selected="true"
          android:color="#222222"/>
    <item android:state_focused="true"
          android:color="#222222"/>
    <item android:color="#0000ff"/>
</selector>

答案 1 :(得分:28)

您必须使用getColorStateList()

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

答案 2 :(得分:5)

您也可以使用ContextCompat加载颜色状态列表

ColorStateList colors = ContextCompat.getColorStateList(this,R.color.my_color_list);