颜色状态列表 "event" 未触发或处理

Color state list "event" not triggered or handled

我遵循了这个答案: and this one:

考虑一下这个导航视图。它使用颜色状态列表 color_state_menu.

<android.support.design.widget.NavigationView
    app:itemBackground="@color/color_state_menu"
    android:id="@+id/navigation_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:menu="@menu/drawer_view">

此颜色状态列表定义如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true" android:drawable="@color/colorRoyalRed" />
    <item android:drawable="@color/gray" />
</selector>

...当前使用的菜单项背景为红色,其他菜单项背景为灰色。

但是,所有这些菜单项的背景总是灰色的。你知道为什么吗?

您需要做几件事:

  1. 使用 DrawableStateList 而不是 ColorStateList - 只需将 color_state_menu.xml 移动到 drawable 文件夹并更改

    app:itemBackground="@color/color_state_menu"
    

    app:itemBackground="@drawable/color_state_menu"
    
  2. 使用android:state_checked代替android:state_activated

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@color/colorRoyalRed" android:state_checked="true" />
        <item android:drawable="@color/gray" />
    </selector>
    
  3. drawer_view.xml

  4. 中的每个菜单项中添加android:checkable="true"