我有一个简单文本项的列表视图。这些项目中的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);
}
除了一个问题外,这个工作正常:单击项目时文本颜色不会改变。即使我在setDuplicateParentStateEnabled(true)
之后立即对项目发送setTextColor()
,也会完全忽略该设置。
我通过注释掉设置文本颜色的Java代码并在xml中设置它来测试它,并且选择器工作得很好。但是如果我以编程方式设置textColor,它完全无法复制父状态。
有没有人见过这个?是否有解决方法,或者这只是我必须忍受的Android错误?
答案 0 :(得分:21)
getResources().getColorStateList()
而不是getResources().getColor()
。将此留给任何犯同样错误的人。
答案 1 :(得分:1)
来自colors.xml:textview.setTextColor(getResources().getColor(R.color.your_color));
来自Android系统:textview.setTextColor(Color.BLACK);
享受:)
答案 2 :(得分:0)
getColor()已弃用
textViewObject.setTextColor(ContextCompat.getColor(context,R.color.white))