使用setTextColor()在程序中设置Android TextView的文字颜色,会使android:duplicateParentState无效。

7

我有一个简单文本项的列表视图。这些项中的 TextView 看起来像这样(它被包含在一个 RelativeLayout 中):

<TextView
  android:id="@+id/text_language_name"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentLeft="true"
  android:layout_centerVertical="true"
  android:duplicateParentState="true"
  android:textSize="16sp"
  android:textStyle="bold" />

我想使用下面这个颜色状态选择器来设置文字的样式,我将它命名为“dark_list_text_states.xml”:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" android:color="@android:color/white"/>
    <item android:color="@color/dark_list_text"/>

</selector>

当然,通常情况下,我可以在XML中将其设置为android:textColor属性,但在这种情况下,我需要使用此选择器(“blue_text_states.xml”)以编程方式将一个特定项设置为不同的颜色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" android:color="@android:color/white"/>
    <item android:color="@color/selected_blue"/>

</selector>

那么我在适配器中设置文本颜色 (language_nameselected 已经在代码中定义):

        TextView text_language_name = (TextView)view.findViewById(R.id.text_language_name);
        if (text_language_name != null) {
            text_language_name.setText(language_name);
            int text_color = selected
                           ? getResources().getColor(R.color.blue_text_states)
                           : getResources().getColor(R.color.dark_list_text_states);
            text_language_name.setTextColor(text_color);
            text_language_name.setDuplicateParentStateEnabled(true);
        }

这个代码在大多数情况下都能正常工作,但有一个问题:当单击项目时,文本颜色不会改变。尽管我在调用setTextColor()后立即在项目上调用setDuplicateParentStateEnabled(true),但该设置完全被忽略了。
我已经通过注释设置文本颜色的Java代码并在xml中设置它来进行了测试,选择器可以正常工作。但如果我以编程方式设置textColor,则完全无法复制父状态。
有人遇到过这种情况吗?有没有解决方法,或者这只是我必须接受的Android bug?
3个回答

23

好的,找到了我的错误。我应该使用 getResources().getColorStateList() 而不是 getResources().getColor()。为了其他犯同样错误的人留下这里。


0

来自colors.xml: textview.setTextColor(getResources().getColor(R.color.your_color));

来自Android系统: textview.setTextColor(Color.BLACK);

享受吧 :)


0

getColor()已被弃用

textViewObject.setTextColor(ContextCompat.getColor(context,R.color.white))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接