Цветовой список состояний «событие» не вызван или не обработан

1

Я следовал за этим ответом: Тема NavigationView выбрал стиль фона элемента и этот: Android - Navigation View цвет фона меню элемента

Рассмотрим этот вид навигации. Он использует список состояний цвета 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>

... таким образом, что текущий используемый пункт меню имеет красный фон, а остальные - серый.

Однако все эти пункты меню всегда имеют серый фон. Ты знаешь почему?

Теги:
android-navigationview

1 ответ

1
Лучший ответ

Вам нужно сделать несколько вещей:

  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. Добавить android:checkable="true" для каждого пункта меню в drawer_view.xml

  • 1
    Я не думал, чтобы сделать предметы для проверки. Таким образом, я просто попытался вызвать setCheckable(true) в обработчике OnItemClickListener представления OnItemClickListener , после чего я сохранил свой вызов setChecked(true) и он работает! Спасибо! Обратите внимание, что color_state_menu.xml может быть сохранен как в каталогах res/color и в res/drawable (это не имеет значения). Наконец, state_checked кажется, действительно хорошее состояние (я не пробовал с state_activated ).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню