Подтвердить что ты не робот

Как стилизовать библиотеку поддержки дизайна NavigationView?

Итак, я использую NavigationView, предоставленный Библиотекой поддержки дизайна Android.

enter image description here

Я не могу найти примеры того, как стилизовать его.

До сих пор я:

<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_height="match_parent"
    android:layout_width="wrap_content"
    android:layout_gravity="start"
    app:headerLayout="@layout/header"
    app:menu="@menu/drawer"
    app:itemTextColor="@color/black"
    app:itemIconTint="@color/black"/>

Стилирование заголовка легко, так как оно находится под собственным XML-макетом, но тело - это файл ресурсов меню, а не макет.

  • app:itemTextColor изменяет цвет текста
  • app:itemIconTint изменяет цвет значка
  • app:itemBackground изменяет цвет фона элемента

Итак, как установить

  • выбранный элемент фона
  • цвет текста выбранного элемента
  • значок выбранного элемента.
4b9b3361

Ответ 1

Я ответил на аналогичный вопрос здесь.

В основном, что вам нужно, используйте Color State List Resource. Для этого сначала создайте новый xml (например, drawer_item.xml) внутри каталога color (который должен находиться внутри каталога res.) Если у вас еще нет каталога с именем color, создайте его.

Теперь внутри drawer_item.xml сделайте что-то вроде этого

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="checked state color" android:state_checked= "true" />
    <item android:color="your default color" />
</selector>

Для itemBackground отдельная вытягиваемая часть также должна быть помещена внутри выпадающей папки. Имя такое же drawer_item. android:drawable свойство должно быть установлено вместо android:color для itemBackground:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
       android:drawable="@drawable/shape_rectangle_checked"

        android:state_checked= "true" />
    <item android:drawable="@drawable/shape_rectangle" />

</selector>

Файл shape_rectangle:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
<solid android:color="#ffffff" /> <!--white color -->
</shape>

Файл shape_rectangle_checked:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
<solid android:color="#25aaf1" /> <!--blue color -->
</shape>

а затем установите в своем навигационном виде, как это

app:itemIconTint="@color/drawer_item" //notice here
app:itemTextColor="@color/drawer_item" //and here
app:itemBackground="@drawable/drawer_item"//and here for changing the background color of the item which is checked

Ответ 2

Чтобы расширить ответ на @Sash_KP, для xml в папке drawable вам не нужны @drawable/shape_rectangle и @drawable/shape_rectangle_check. Вы можете просто использовать @color/your_color.

Также для API >= 21 я заметил, что элементы меню навигации по умолчанию имеют предустановленный селектор. Вы заметите, что при касании и удержании пункта меню появится рябь. Использование пользовательского itemBackground не будет отменять пульсацию по умолчанию. Поэтому, если вы используете ripple drawable, это создаст две ряби! Также пункты меню с ripple drawables не позволяют вам иметь нажатое состояние по какой-либо причине (пульсация по умолчанию будет отображаться только в том случае, если вы удерживаете ее нажатой).

Итак, для API >= 21 я бы не рекомендовал использовать ripple drawable. Просто используйте обычный selector drawable без особых рядов.