Java 操作栏菜单项未正确着色

Java 操作栏菜单项未正确着色,java,android,android-actionbar,android-menu,Java,Android,Android Actionbar,Android Menu,我正在尝试将菜单项的颜色着色为Color.WHITE,但由于某些原因,它无法正常工作 染色前 染色后 我不明白为什么我只想将图标颜色从灰色改为白色就发生了这种情况。可能与DrawableCompat有关。我总是使用带有PorterDuff的ColorFilter进行着色,因为它允许精确指定您想要的重新着色类型(SRC_IN最适合我想要实现的结果) 试着这样改变它: Drawable drawable = menu.findItem(R.id.action_info).getIcon(); d

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

染色前

染色后


我不明白为什么我只想将图标颜色从灰色改为白色就发生了这种情况。

可能与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\u菜单\u信息\u详细信息
,它内置了不透明度。最好使用自己的图标,以便根据需要对其进行着色

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

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

选项1:

  • 在此处查找图标:

  • 并将其添加到您的drawables文件夹中

选项2:

  • 使用矢量绘图工具,图像也将在每个设备上自动缩放

  • 右键单击可绘制文件夹

  • 转到
    新建
    ->
    矢量资产

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

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

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