Я следовал за этим ответом: Тема 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>
... таким образом, что текущий используемый пункт меню имеет красный фон, а остальные - серый.
Однако все эти пункты меню всегда имеют серый фон. Ты знаешь почему?
Вам нужно сделать несколько вещей:
Используйте DrawableStateList
вместо ColorStateList
- просто переместить color_state_menu.xml
в drawable
папку и изменения
app:itemBackground="@color/color_state_menu"
в
app:itemBackground="@drawable/color_state_menu"
Используйте 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>
Добавить android:checkable="true"
для каждого пункта меню в drawer_view.xml
setCheckable(true)
в обработчикеOnItemClickListener
представленияOnItemClickListener
, после чего я сохранил свой вызовsetChecked(true)
и он работает! Спасибо! Обратите внимание, чтоcolor_state_menu.xml
может быть сохранен как в каталогахres/color
и вres/drawable
(это не имеет значения). Наконец,state_checked
кажется, действительно хорошее состояние (я не пробовал сstate_activated
).