导航抽屉项目图标不显示原始颜色

我正在尝试在我的导航抽屉的菜单项旁边显示一个图标,但出于某种原因,图标总是以灰色显示,而不是原始颜色(棕色)。 有什么办法来防止这种情况发生,以显示图标的原始颜色?

MainActivity.java

public class MainActivity extends AppCompatActivity { private DrawerLayout mDrawerLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); if (navigationView != null) { setupDrawerContent(navigationView); } } private void setupDrawerContent(NavigationView navigationView) { navigationView.setNavigationItemSelectedListener( new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { mDrawerLayout.closeDrawers(); return true; } }); } } 

drawer_view.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="Section"> <menu> <item android:id="@+id/navigation_item_1" android:icon="@drawable/ic_browncircle" android:title="Sub item 1" /> </menu> </item> </menu> 

在这里输入图像说明

我在这里find了答案: https : //stackoverflow.com/a/30632980/875249

为了避免这个链接,它非常简单:

  mNavigationView.setItemIconTintList(null); 

这将禁用所有基于状态的着色,但是您也可以指定自己的列表。 它对我很好!

这里是你可以得到创build一个颜色状态列表的细节,但它也很简单: http : //developer.android.com/reference/android/content/res/ColorStateList.html

  <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:color="@color/primary" /> <item android:state_checked="false" android:color="@android:color/white" /> </selector> 

使用

  mNavigationView.setItemIconTintList(null); 

这是正确的。 另外如果所有的图标在一个配色scheme(我全白了),你可以通过XML文件设置 – 应用程序:itemIconTint =“@ android:color / white”

我的情况:

 <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:clickable="true" app:headerLayout="@layout/nav_header_main" app:itemTextColor="@android:color/white" app:menu="@menu/activity_main_drawer" android:background="@android:color/black" app:itemIconTint="@android:color/white" /> 

我在我的一个应用程序中尝试过类似的东西。 是的,看起来图标的颜色不会改变。 但是我已经设法处理另一个解决方法。 这是我的ic_browncircle.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" android:tint="@color/brown" > <size android:height="3dp" android:width="3dp" /> <solid android:color="@color/brown"/> </shape> 

我相信这是类似于你的东西,但它没有任何效果,不会改变颜色。

所以我做了这个。

 navigationView.getMenu() .findItem(R.id. navigation_item_1) .getIcon() .setColorFilter(Color.parseColor("#b69260"), PorterDuff.Mode.SRC_ATOP); 

它似乎工作。 结果如下。

在这里输入图像说明

你可以尝试使用有色的drawable,不知道它是否在5.0以下。

创build一个drawable并添加下面的代码。

 <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/ic_browncircle" android:tint="@color/brownColor"/> 

然后将您的菜单项可更改为您刚刚创build的菜单项。 如果这不起作用,那么我不确定任何其他解决scheme。 你可以试试这个库: https : //github.com/mikepenz/MaterialDrawer我在我的项目中使用了很多。

只需在xml中添加一行

app:itemIconTint="@color/white"