26

Так я использую NavigationView предоставленного Android Design Support LibraryКак создать навигационную панель библиотеки поддержки дизайна?

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 изменяет элемент цвет фона

Так как установить

  • фон выбранный элемент
  • выбранный элемент цвет текста
  • выбран значок пункт Оттенок

ответ

45

Я ответил на подобный вопрос Here.

В основном, что вам нужно сделать, используйте 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> 

, а затем установить в вашем navigationview как этот

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 
+1

Я поместил xml под res/color, но он говорит: «Ресурсы $ NotFoundException: File res/color/drawer_menu_item.xml из ресурса с возможностью рисования» –

+0

Пожалуйста, проверьте мои изменения и lemme, знаете ли, что это сработало для вас. –

+1

Добавление чертежей внутри строк.xml .. Вероятно, лучший способ заблудиться в ваших файлах: – geecko

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 без особых рядов.

Смежные вопросы