Как указать цвет элементов меню для навигационного ящика?

Я создавал навигационный ящик, и я видел, что playtore имеют цветные значки меню, которые я хочу знать, как я могу это сделать. Я попытался применить цвета colorFilter к значкам меню, но сила приложения закрывается

Мое приложение

Что я хотел

Это мой код

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/grp1" android:checkableBehavior="single"> <item android:id="@+id/navigation_songs" android:checked="true" android:icon="@drawable/ic_audiotrack_white_24dp" android:title="@string/songs" /> <item android:id="@+id/navigation_albums" android:icon="@drawable/ic_album_white_24dp" android:title="@string/albums" /> <item android:id="@+id/navigation_artist" android:icon="@drawable/ic_person_white_24dp" android:title="@string/artists" /> <item android:id="@+id/navigation_playlist" android:icon="@drawable/ic_playlist_play_white_24dp" android:title="@string/playlist" /> </group> <group android:id="@+id/grp2" android:checkableBehavior="none"> <item android:id="@+id/navigation_about" android:icon="@drawable/ic_info_white_24dp" android:title="@string/about" /> <item android:id="@+id/navigation_settings" android:icon="@drawable/ic_settings_white_24dp" android:title="@string/settings" /> </group> </menu> 

  1. Чтобы очистить все значки от определенного цвета, вам нужно добавить app:itemIconTint в свой NavigationView app:itemIconTint :

     <android.support.design.widget.NavigationView ........ app:itemIconTint="<your color>"/> 

    Введите описание изображения здесь

  2. Чтобы покрасить ваши значки только в 2 цветах :

    Создать селектор:

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="#0000FF" android:state_checked= "true" /> <item android:color="#FF0000" /> </selector> 

    И примените его как app:itemIconTint в вашем NavigationView :

     <android.support.design.widget.NavigationView ........ app:itemIconTint="@drawable/tint_color_selector"/> 

    Последний шаг – добавить android:checked="true" в MenuItems в меню xml вашего ящика, которое вы хотите почистить разными:

      <item android:id="@+id/nav_slideshow" android:checked="true" android:icon="@drawable/ic_menu_slideshow" android:title="Slideshow" /> 

    Введите описание изображения здесь

  3. Чтобы очистить все значки разных цветов, например Google, в Google Play:

    Отключить покачивание ваших значков:

      navigationView.setItemIconTintList(null); 

    Добавьте значки, которые вы хотите к res/drawable и укажите их как android:icon в вашем xml-меню. (Я могу порекомендовать хороший сервис для значков android icons8.com/web-app/new-icons/android )

    Введите описание изображения здесь

    Вместо того, чтобы загружать новые яркие значки, вы можете рисовать существующие, но это очень хаки:

      Drawable oldIcon = navigationView .getMenu() .findItem(R.id.nav_gallery) .getIcon(); if (!(oldIcon instanceof BitmapDrawable)) { return; } Bitmap immutable = ((BitmapDrawable)oldIcon).getBitmap(); Bitmap mutable = immutable.copy(Bitmap.Config.ARGB_8888, true); Canvas c = new Canvas(mutable); Paint p = new Paint(); p.setColor(Color.RED); p.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY)); c.drawBitmap(mutable, 0.f, 0.f, p); BitmapDrawable newIcon = new BitmapDrawable(getResources(), mutable); navigationView .getMenu() .findItem(R.id.nav_gallery) .setIcon(newIcon); 

    Осторожно! В res/drawables-v21 в проекте шаблона Google использует VectorDrawable s вместо старого BitmapDrawables , поэтому этот код там не работает.

Я надеюсь, что это помогает.

Intereting Posts
Подсказка не отображается с помощью TextInputLayout в нефокусированном состоянии Определение пропускной способности (скорости) беспроводной сети и мобильных данных Как анимировать маркер в android-карте api V2? Преобразовать карту <Integer, Object> в JSON с помощью GSON? Для чего нужно использовать AccountManager для Android? Открыть диалог извещения Инструменты для быстрого создания макета / интерфейса? Добавление формы в LinearLayout Android Как общаться между аддоном Firefox и процессом Android? Изображения JPEG имеют разные значения пикселей для нескольких устройств Скольжение, не загружающее реальное изображение и застрявшее с заполнителем Защитить приложение для Android от пиратства Использование микрофона в эмуляторе Android (Java + Android beginner) Как избежать загрузки видео или изображения с сервера, как только мы увидели (как и хранить в кэш-памяти)? Как отправить сообщение в twitter с помощью приложения для Android?