2016-01-10 21 views
6

Kiedy tworzyłem szufladę nawigacyjną i widziałem playtore mają kolorowe ikony menu chcę wiedzieć, jak mogę to zrobić. Próbowałem zastosować kolory przez colorfilter na ikony menu, ale aplikacja siła zamykaJak nadać kolor elementom menu dla szuflady nawigacji?

My app

what i wanted

To jest mój kod

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

Odpowiedz

10
  1. szczotkować wszystkie ikony w particu kolor lar, trzeba dodać app:itemIconTint do swojej NavigationView:

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

    enter image description here

  2. szczotkować ikony tylko w 2 kolorach:

    Stwórz selektora:

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

    I zastosuj jako app:itemIconTint w y Nasz NavigationView:

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

    Ostatni krok - aby dodać android:checked="true" do MenuItems w menu xml szufladzie którego chcesz odświeżyć inaczej:

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

    enter image description here

  3. szczotkować wszystkie ikony w innym kolorów, takich jak Google w Google Play:

    Wyłącz barwienia swoich ikon:

    navigationView.setItemIconTintList(null); 
    

    Dodaj ikony chcesz do res/drawable i określić je jako android:icon w menu w XML. (Mogę polecić miłą obsługę dla android ikony icons8.com/web-app/new-icons/android)

    enter image description here

    Zamiast przesyłając nowe kolorowe ikony, można malować już istniejących, ale to bardzo 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); 
    

    Uważaj! W szablonie Google używas zamiast starego BitmapDrawables, więc ten kod nie będzie tam działać.

Mam nadzieję, że pomoże.

+0

Witam Panie, mogę zmienić kolor tekstu podpozycji, np. (Komunikuj się)?Przeszukuję wszystko, ale nie mogę znaleźć ... Proszę o wprowadzenie pewnych niestandardowych zmian. –

+0

Nice! najlepsze wyjaśnienie, jakie widziałem. Czy programista może ustawić kolory ikon zgodnie z tematem? –

+0

Idealne rozwiązanie –