2016-01-10 18 views
6

Stavo creando Navigation Drawer e ho visto il playtore avere le icone colorate del menu voglio sapere come posso farlo. Ho cercato di applicare i colori da colorfilter sulle icone del menu, ma la forza app chiudeCome dare colore alle voci del menu per il cassetto di navigazione?

My app

what i wanted

Questo è il mio codice

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

risposta

10
  1. Per spazzolare tutte le icone in particolare colore LAR, è necessario aggiungere app:itemIconTint nella vostra NavigationView:

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

    enter image description here

  2. di lavarsi i icone in soli 2 colori:

    creare un selettore:

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

    E applicarlo come app:itemIconTint in y il nostro NavigationView:

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

    Ultimo passo - per aggiungere android:checked="true" alla MenuItems in xml menu del cassetto che si desidera spazzolare diversa:

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

    enter image description here

  3. per spazzolare tutte le icone in diverso colori, come Google ha in Google Play:

    Disabilita colorazione delle icone:

    navigationView.setItemIconTintList(null); 
    

    aggiungere icone desiderate al res/drawable e specificare come android:icon in XML del vostro menu. (Posso consigliare un bel servizio per le icone Android icons8.com/web-app/new-icons/android)

    enter image description here

    Invece di caricare nuove icone colorate, è possibile dipingere quelle esistenti, ma è molto 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); 
    

    Watch out! In progetto res/drawables-v21, Google utilizza VectorDrawable s anziché il vecchio BitmapDrawables, quindi questo codice non funzionerà lì.

Spero che sia d'aiuto.

+0

Ciao signore Posso cambiare il colore del testo del sottotitolo come (Comunicare)?Cercherò tutto intorno ma non riesco a trovarlo..Per favore forniscici delle modifiche personalizzate. –

+0

Bello! migliore spiegazione che ho visto. Un programmatore può impostare i colori delle icone in base a un tema? –

+0

Soluzione perfetta –