如何将 NavigationView 中的 Tint 设置为某些图标
How to set Tint in NavigationView to some icons
我想保留一些图标不着色,一些图标着色。
现在我有:
app:itemIconTint="@color/menu_icons_selector"
它为所有图标着色。
我正在尝试让所有图标都不着色
mNavigationView.setItemIconTintList(null);
然后
mNavigationView.getMenu().getItem(4).getIcon().setColorFilter(redColor, PorterDuff.Mode.SRC_ATOP);
只为第 4 个项目设置色调,但这不起作用 - 所有图标现在都没有着色,第 4 个也没有着色。
您可以"wrap"将图标作为可绘制对象 (res/drawable) 并应用适用的色调
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_menu_icon"
android:tint="@color/pink"/>
如果您的图标在 ImageView
中,您可以使用 setColorFilter
。
就像我正在处理的应用程序中的这个示例一样,当在导航抽屉中选择图标时,图标会变色。
ImageView iconView = (ImageView) view.findViewById(R.id.icon);
iconView.setColorFilter(selected ?
getResources().getColor(R.color.navdrawer_icon_selected_tint) :
getResources().getColor(R.color.navdrawer_icon_tint));
您也可以将 setColorFilter
直接应用于 Drawable
。
这对我有用....
通过这种方式,您可以通过编程方式为单个导航 MenuItem
图标颜色着色
navigation.getMenu().findItem(R.id.navItem1).getIcon().setColorFilter(Color.RED,PorterDuff.Mode.SRC_IN);
我想保留一些图标不着色,一些图标着色。 现在我有:
app:itemIconTint="@color/menu_icons_selector"
它为所有图标着色。
我正在尝试让所有图标都不着色
mNavigationView.setItemIconTintList(null);
然后
mNavigationView.getMenu().getItem(4).getIcon().setColorFilter(redColor, PorterDuff.Mode.SRC_ATOP);
只为第 4 个项目设置色调,但这不起作用 - 所有图标现在都没有着色,第 4 个也没有着色。
您可以"wrap"将图标作为可绘制对象 (res/drawable) 并应用适用的色调
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_menu_icon"
android:tint="@color/pink"/>
如果您的图标在 ImageView
中,您可以使用 setColorFilter
。
就像我正在处理的应用程序中的这个示例一样,当在导航抽屉中选择图标时,图标会变色。
ImageView iconView = (ImageView) view.findViewById(R.id.icon);
iconView.setColorFilter(selected ?
getResources().getColor(R.color.navdrawer_icon_selected_tint) :
getResources().getColor(R.color.navdrawer_icon_tint));
您也可以将 setColorFilter
直接应用于 Drawable
。
这对我有用....
通过这种方式,您可以通过编程方式为单个导航 MenuItem
图标颜色着色
navigation.getMenu().findItem(R.id.navItem1).getIcon().setColorFilter(Color.RED,PorterDuff.Mode.SRC_IN);