Android在代码里动态设置文字颜色Selector中getColor与getColorStateList方法的区别(坑)

当我们需要动态的在代码里给文字设置颜色,而这个文字具有点击态的时候,我们经常会遇到怎么设置都不好使的情况,接下来从踩坑、填坑,到最后分析原因整个流程详细介绍一下这种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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值