我需要在状态改变时更改文字颜色(按下,对焦)......
如何使用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))
答案 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);