选定的列表视图项不会更改文本颜色,即使分配了颜色状态列表资源也是如此



我希望列表视图中项目的文本颜色在选择时更改。我阅读了以下文章(如何在Android中设置ListView选定的项目备用文本颜色(,并进行了以下更改:

创建一个colorStateList资源 @drawable/list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#ffffff00" /> <!-- default -->
<item
    android:state_pressed="true"
    android:color="#ff000000" />
<item
    android:state_selected="true"
    android:color="#ffff0000" />
<item
    android:state_focused="true"
    android:color="#ff0000ff" />

将资源分配给目标文本视图中的textColor属性

<TextView
    android:id="@+id/person_active_list_name"
    android:paddingLeft="@dimen/person_list_name_left_padding"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/person_list_image_size"
    android:layout_toEndOf="@id/person_active_thumbnail"
    android:layout_toLeftOf="@id/person_active_list_arrow"
    android:layout_toRightOf="@id/person_active_thumbnail"
    android:layout_toStartOf="@id/person_active_list_arrow"
    android:gravity="center|start"
    android:textColor="@drawable/list_item" />

出于某种原因,仅应用 @drawable/list_item.xml中的默认颜色(因此,TextView确实消耗了ColorStateList资源(。但是,当按下列表项目,选择等列表项时,文本颜色没有更改。

来自文档:

注意:请记住,将应用与对象的当前状态相匹配的状态列表中的第一项。因此,如果列表中的第一个项目包含上面的状态属性,则每次都将应用它,这就是为什么您的默认值应始终是最后一个

因此,将您的定义更改为此:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:color="#ff000000" />
    <item
        android:state_selected="true"
        android:color="#ffff0000" />
    <item
        android:state_focused="true"
        android:color="#ff0000ff" />
    <item android:color="#ffffff00" /> <!-- default -->
</selector>

最新更新