操作栏菜单项未正确着色

Action bar menu item not tinting colour properly

我正在尝试将菜单项颜色着色为 Color.WHITE,但由于某些原因无法正常工作。

调色前

调色后

    Drawable drawable = menu.findItem(R.id.action_info).getIcon();
    drawable.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
    menu.findItem(R.id.action_info).setIcon(drawable);

当我只想将图标颜色从灰色更改为白色时,我不明白为什么会发生这种情况。

可能与 DrawableCompat 有关。我总是使用带有 PorterDuff 的 ColorFilter 进行着色,因为它允许准确指定您想要的重新着色类型(SRC_IN 大部分符合我想要实现的结果)

试着改成这样:

Drawable drawable = menu.findItem(R.id.action_info).getIcon();
drawable.setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);
menu.findItem(R.id.action_info).setIcon(drawable); // Actualy, we don't need to do this

编辑:

我明白了。此效果是由您使用的图像引起的。我猜您使用的是内置不透明度的默认图标 ic_menu_info_details。最好使用您自己的图标,以便根据需要为其着色。

基本上我们可以采用相同的图标,没有不透明度。然后这个 PorterDuff 方法按预期工作(也可能是您之前的代码)。

您可以轻松找到该图标并将其添加到您的项目中。

选项 1:

选项 2:

  • 使用矢量绘图,那么图像也会在每个设备上自动缩放。

  • 右键单击可绘制文件夹

  • 转到New -> Vector Asset

  • 单击更改图标按钮,找到信息图标

不要忘记更改 menu.xml 以便使用新图标