【问题标题】:Selector on TextView does not change colorTextView 上的选择器不会改变颜色
【发布时间】:2017-07-30 12:38:20
【问题描述】:

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

但是,如果我在 Activity 中激活 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>

【问题讨论】:

  • 它不起作用。它只显示默认状态的文本颜色
  • 您是否尝试在 tv_header_exam.setActivated 之前调用 tv_header_exam.setTextColor ?
  • 您是否记得将选择器分配给 TextView 背景?

标签: android android-layout textview android-selector


【解决方案1】:

使用getColorStateList() 而不是getColor()

如果支持

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

getColor() 的 Javadoc:

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

getColorStateList()的JavaDoc:

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

【讨论】:

  • 这就是解决方案。它与 getColorStateList() 一起使用。谢谢
猜你喜欢
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 2012-04-16
  • 2011-05-07
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多