我正在尝试将菜单项颜色设置为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);
我不明白为什么我只想将图标颜色从灰色变为白色。
答案 0 :(得分:1)
可能与DrawableCompat有关。我总是使用ColorFilter和PorterDuff进行着色,因为它可以准确指定你想要的重新着色类型(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:
在此处查找图标:http://romannurik.github.io/AndroidAssetStudio/icons-actionbar.html
并将其添加到您的drawables文件夹
选项2:
使用矢量绘图,然后图像也会在每台设备上自动缩放。
右键单击drawable文件夹
转到New
- > Vector Asset
点击更改图标按钮,找到信息图标
别忘了更改menu.xml
以便您使用新图标