2017-08-31 102 views
1

我想更改NavigationView中项目中的颜色图标,我尝试放置一个不同颜色的图标(不同颜色的图标),但它不能正常工作我只看到灰色图标,但我放蓝色和红色图标Java android导航查看更改项目中的颜色图标

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:title="@string/settings"> 
     <menu> 
      <item 
       android:id="@+id/settings" 
       android:icon="@drawable/ic_action_settings" 
       android:title="@string/settings" /> 
     </menu> 
    </item> 

    <item android:title="@string/filtr"> 
     <menu> 
      <item 
       android:id="@+id/all" 
       android:icon="@drawable/ic_action_cut" 
       android:title="@string/all" /> 
      <item 
       android:id="@+id/not_done" 
       android:icon="@drawable/ic_action_cut2" 
       android:title="@string/not_done" /> 
     </menu> 
    </item> 

    <item android:title="@string/sort"> 
     <menu> 
      <item 
       android:id="@+id/sort_default" 
       android:icon="@drawable/ic_action_sort" 
       android:title="@string/sort_default" /> 
      <item 
       android:id="@+id/sort_by_distance" 
       android:icon="@drawable/ic_action_sort" 
       android:title="@string/sort_by_distance" /> 
     </menu> 
    </item> 

</menu> 
+0

是否使用矢量图标? –

+0

@VishalVaishnav no png –

回答

3

如果要动态地更改项目的颜色,你必须做你的活动代码的地方:

final Menu menu = navView.getMenu(); 
final MenuItem menuItem = menu.findItem(id); 
final Drawable itemIcon = menuItem.getIcon().mutate(); 
itemIcon.setColorFilter(color, PorterDuff.Mode.SRC_IN); 

使用可绘制的mutate()方法,否则你将应用颜色随特定Drawable的每次迭代而改变。

编辑:

我刚刚读到你没有使用VectorDrawable。使用它。根据您的可绘制的名称来判断,您可以使用Google提供的图标。

您可以通过导航到您的Drawable资源文件夹来在AndroidStudio中找到它们。 然后右键单击它,新建>矢量资产。 资产类型:材料图标。 选择你想使用的图标,然后应用上面的代码。

2

添加以下在Java代码行:

mNavigationView.setItemIconTintList(null);