TextView上的选择器不会更改颜色

时间:2017-07-30 12:38:20

标签: android android-layout textview android-selector

我有一个以编程方式创建的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>

1 个答案:

答案 0 :(得分:0)

使用getColorStateList()代替getColor()

如果你支持&lt; API 23,您可以使用辅助方法

ContextCompat.getColorStateList(context, R.color.your_selector);

getColor()的Javadoc:

  

返回与特定资源ID关联的颜色整数。如果   资源包含一个复杂的{@link ColorStateList},然后是默认值   返回集合中的颜色。

getColorStateList()的JavaDoc:

  

返回与特定资源ID关联的颜色状态列表。   资源可以包含单个原始颜色值或复合体   {@link ColorStateList}持有多种可能的颜色。