2016-01-10 154 views
6

我正在創建導航抽屜,我看到playtore有彩色菜單圖標 我想知道我該如何做到這一點。 我試圖通過colorFilter上的菜單圖標,應用顏色,但應用強行關閉如何給導航抽屜的菜單項添加顏色?

My app

what i wanted

這是我的代碼

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

回答

10
  1. 要刷所有圖標 into particu LAR顏色,你需要添加app:itemIconTint到您的NavigationView

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

    enter image description here

  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應用於y我們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" /> 
    

    enter image description here

  3. 要刷所有圖標不同顏色,就像Google在Google Play中的顏色一樣:

    的圖標是禁用着色:

    navigationView.setItemIconTintList(null); 
    

    添加你想要的圖標到res/drawable並指定他們作爲你的菜單的XML android:icon。 (我可以推薦一個很好的服務,爲Android的圖標icons8.com/web-app/new-icons/android

    enter image description here

    不需要上傳新的彩色圖標,你可以畫現有的,但它是非常哈克:

    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而不是舊的BitmapDrawables,所以這段代碼在那裏不起作用。

我希望它有幫助。

+0

您好先生,我可以改變像(溝通)副標題的文字顏色?我會搜索周圍,但我找不到..請爲我提供一些自定義更改。 –

+0

不錯!我見過的最好的解釋。開發者可以根據主題設置圖標顏色嗎? –

+0

完美的解決方案 –

相關問題