当我们需要动态的在代码里给文字设置颜色,而这个文字具有点击态的时候,我们经常会遇到怎么设置都不好使的情况,接下来从踩坑、填坑,到最后分析原因整个流程详细介绍一下这种case。
下面是我们在/res/color文件夹里给元素设置的文字颜色seletor:***_view_btn_text_color_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/***_view_btn_text_color_pressed" android:state_pressed="true" />
<item android:color="@color/***_view_btn_text_color_normal" />
</selector>
1.踩坑
在代码里设置元素的颜色seletor,以为在代码里直接调用 .setTextColor(int colorValue)就可以了,结果运行效果是只能读取到没获取焦点时的色值,而其他状态获取不到。
//设置元素文字颜色
empty_btn?.setTextColor(resources.getColor(R.color.***_view_btn_text_color_selector))
2.填坑
采用一下方法为元素设置文字颜色:
empty_btn?.setTextColor(resources.getColorStateList(R.color.***_view_btn_text_color_selector))
区别在于:改之前用的是getColor()方法,改之后用的是getColorStateList()方法。
3.原因分析
文字颜色的seletor在代码里的显示形式是ColorStateList,而res/color放的就是ColorStateList资源XML文件,getColor()只能读取单个的color。