如何为TextView定义ColorStateList?

时间:2010-09-30 03:09:48

标签: android listview colors listviewitem

当我的ListViewItem突出显示时,我希望文字变为白色。我该如何定义?

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_focused="true" android:color="@color/testcolor1"/>
   <item android:state_pressed="true" android:state_enabled="false" android:color="@color/testcolor2" />
   <item android:state_enabled="false" android:color="@color/testcolor3" />
   <item android:color="@color/testcolor5"/>
 </selector>

3 个答案:

答案 0 :(得分:66)

创建文件res / drawable / text_color.xml:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:color="#ffffff" />
    <item android:state_focused="true" android:state_pressed="true" android:color="#ffffff" />
    <item android:state_focused="false" android:state_pressed="true" android:color="#ffffff" />
    <item android:color="#000000" />
</selector>

然后使用xml中的@drawable/text_color(或代码中的R.drawable.text_color)作为列表视图项的文本颜色。

答案 1 :(得分:1)

除了上面提到的其他内容之外,我想强调一点,取自以下网址。

https://developer.android.com/reference/android/content/res/ColorStateList.html

注意:状态规范列表将按照它们出现在XML文件中的顺序进行匹配。因此,应在文件的前面放置更具体的项目。没有状态规范的项目被认为与任何状态集匹配,并且通常可用作最终项目作为默认值。

重要的是,你在选择器标签的底部有更广泛的条件。希望这有帮助!

答案 2 :(得分:0)

尝试一下...

首先,在text_color.xml目录中创建一个颜色状态列表res/color

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="MissingDefaultResource">
  <item android:color="#000000" android:state_enabled="false"/>
  <item android:color="#FFFFFF"/>
</selector>

第二,使用

getColorStateList(@NonNull Context context,
            @ColorRes int id)

获取颜色状态列表的方法。

textView.setTextColor(ContextCompat.getColorStateList(context, R.color.text_color))

根据您的要求再次启用,启用(true)或禁用(false)

textView.isEnabled = true //when item is highlighted

快乐的编码...