【问题标题】:Setting Android TextView text color programmatically with setTextColor() renders android:duplicateParentState invalid使用 setTextColor() 以编程方式设置 Android TextView 文本颜色会导致 android:duplicateParentState 无效
【发布时间】:2013-04-18 23:15:07
【问题描述】:

我有一个简单文本项目的列表视图。这些项目中的 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>

所以我在 Adapter 中设置了文本颜色(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 错误?

【问题讨论】:

    标签: android textview textcolor


    【解决方案1】:

    好的,发现我的错误。我应该使用getResources().getColorStateList() 而不是getResources().getColor()。把这个留给其他犯同样错误的人。

    【讨论】:

      【解决方案2】:

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

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

      享受:)

      【讨论】:

        【解决方案3】:

        getColor() 已弃用

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

        【讨论】:

          猜你喜欢
          • 2016-01-08
          • 1970-01-01
          • 1970-01-01
          • 2012-09-13
          • 1970-01-01
          • 2023-04-05
          • 2013-07-23
          • 1970-01-01
          • 2011-12-16
          相关资源
          最近更新 更多