如何在NavigationView中为某些图标设置色调

12

我希望保留一些图标的颜色,而使另一些图标变色。 现在我的代码如下:

app:itemIconTint="@color/menu_icons_selector"

它给所有的图标染色。

我正在尝试让所有的图标不受染色。

mNavigationView.setItemIconTintList(null);

然后

mNavigationView.getMenu().getItem(4).getIcon().setColorFilter(redColor, PorterDuff.Mode.SRC_ATOP);

想要仅将色调设置为第四个项目,但这不起作用-现在所有的图标都没有被着色,第四个也没有。


我看到你已经使用了 setColorFilter。如果它不起作用,那么我的回答可能并不能帮助你很多(但你可以留着以备将来参考)。尝试删除 app:itemIconTintsetItemIconTintList。我相信那应该可以解决问题。还要确保它实际上被调用了。我的是在 onPostCreate() 中运行的。 - miva2
3个回答

12

这对我很有效... 通过这种方式,您可以以编程方式给个别导航MenuItem图标着色。

navigation.getMenu().findItem(R.id.navItem1).getIcon().setColorFilter(Color.RED,PorterDuff.Mode.SRC_IN);

谢谢,这正是我在寻找的。 - Sloosh

2
你可以将图标作为可绘制对象(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"/>

0
如果您的图标位于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


能否从NavigationView获取图标的ImageViews? - diesersamat
我认为NavigationView内部没有ImageView。您可以直接在从getIcon()获取的Drawable上应用setColorFilter。因为ImageView也会将其应用于Drawable,所以不需要获取ImageView - miva2
就像我说的那样,我已经将ColorFilter设置到了项目中,但它并没有起作用。 - diesersamat
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - miva2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接