2016-01-10 105 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

完美的解决方案 –

相关问题