我有一个简单文本项的列表视图。这些项中的 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_name
和 selected
已经在代码中定义):
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?