我有一个以编程方式创建的TextView并为其添加了一个颜色选择器xml文件。在选择器文件中,只有一个激活状态和默认状态。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#ff867f"/>
<item android:color="#c50e29" android:state_activated="true"/>
</selector>
但如果我在活动中激活TextView,它不会改变文本颜色,仍然显示默认颜色。
tv_header_exam.setActivated(true);
tv_text_exam.setActivated(true);
tv_header_exam.setTextColor(getResources().getColor(R.color.exam));
tv_text_exam.setTextColor(getResources().getColor(R.color.exam));
我在这里想念一下吗?
编辑:
我也尝试过以下选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#c50e29" android:state_activated="true"/>
<item android:color="#ff867f" android:state_activated="false"/>
</selector>
答案 0 :(得分:0)
使用getColorStateList()
代替getColor()
。
如果你支持&lt; API 23,您可以使用辅助方法
ContextCompat.getColorStateList(context, R.color.your_selector);
getColor()的Javadoc:
返回与特定资源ID关联的颜色整数。如果 资源包含一个复杂的{@link ColorStateList},然后是默认值 返回集合中的颜色。
getColorStateList()的JavaDoc:
返回与特定资源ID关联的颜色状态列表。 资源可以包含单个原始颜色值或复合体 {@link ColorStateList}持有多种可能的颜色。