Android中设置setTextColor()没有作用

本文介绍了解决TextView在Android应用中动态设置字体颜色的问题。通过定义颜色选择器并使用ColorStateList来实现不同状态下的字体颜色变化,解决了简单setColor无法达到预期效果的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天修改UI的时候发现使用setTextColor()方法动态设置字体的颜色没有起作用,百度了几种实现方法,将实现的方法记录一下。
setTextColor()方法参数由两种:

public void setTextColor(int color) {
    mTextColor = ColorStateList.valueOf(color);
    updateTextColors();
}

public void setTextColor(ColorStateList colors) {
    if (colors == null) {
        throw new NullPointerException();
    }

    mTextColor = colors;
    updateTextColors();
}

我使用的是方法1,在传参的时候,由于设计要求选中(获取焦点)时字体的颜色和未选中的颜色不同,因此不能简单的传入color.xml中定义的单一颜色值如:
<color name="dialog_btn_text_color">#F1F1F1</color>
因此,在color文件夹下定义了一个text_color_selector_v6.xml,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:color="@color/textview_focused_color" />
    <item android:state_focused="false" android:color="@color/textview_normal_color" />
</selector>

在引用的时候使用:

mTextView.setTextColor(getResources().getColor(R.color.text_color_selector_v6));

只能显示聚焦时的颜色,normal状态的颜色并没有显示出来,为解决该问题百度到另一个方法:

        XmlPullParser xrp = getResources().getXml(R.color.text_color_selector_v6);
        try {
            ColorStateList csl = ColorStateList.createFromXml(getResources(), xrp);
            mTextView.setTextColor(csl);
        } catch (Exception e) {
            e.printStackTrace();
        }

使用上面的方法可解决不作用的问题,在百度setTextColor()的用法时,看到传递的参数是:
mTextView.setTextColor(getResources().getColor(R.color.dialog_btn_text_color));
即color.xml中定义的颜色,而不是自定义的xml,具体原因以后再做补充。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值