Cómo dar color a los elementos del menú para el cajón de navegación?

Estaba creando el cajón de la navegación y vi playtore tienen iconos coloreados del menú quiero saber cómo puedo hacer esto. Intenté aplicar colores por colorFilter en iconos de menú pero la aplicación se cierra

Mi aplicación

Lo que quería

Este es mi codigo

<?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. Para pincelar todos los iconos en un color particular, es necesario agregar la app:itemIconTint en su NavigationView :

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

    Introduzca aquí la descripción de la imagen

  2. Para cepillar tus iconos en sólo 2 colores :

    Crear un selector:

     <?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> 

    Y aplicarlo como una app:itemIconTint en su NavigationView :

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

    Último paso – para agregar android:checked="true" a los MenuItems en el menú de su cajón xml que desea pincel diferente:

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

    Introduzca aquí la descripción de la imagen

  3. Para pinchar todos los iconos en diferentes colores, como Google tiene en Google Play:

    Deshabilitar el tintado de sus iconos:

      navigationView.setItemIconTintList(null); 

    Añadir iconos que desea res/drawable y especificarlos como android:icon en el xml de su menú. (Puedo recomendar un buen servicio para los iconos de Android icons8.com/web-app/new-icons/android )

    Introduzca aquí la descripción de la imagen

    En lugar de cargar nuevos iconos de colores, puede pintar los existentes, pero es muy hacky:

      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); 

    ¡Cuidado! En res/drawables-v21 en el proyecto de plantilla, Google utiliza VectorDrawable s en lugar de BitmapDrawables antiguo, por lo que este código no funcionará allí.

Espero que ayude.

  • Cómo cambiar la fuente personalizada del elemento de menú de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.