对于MenuItem,我使用矢量绘图。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
menu.add(Menu.NONE, 1, Menu.NONE, "Pen")
.setIcon(R.drawable.ic_pen)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return true;
}我有可变的“颜色”。对于安卓版本的>= Lollipop,我使用setTin(颜色)
menuItem.getIcon().setTint(color);对于Android,我想使用<= (setColorFilter,PorterDuff.Mode.SCREEN)。原来是这样的背景(正方形)
menuItem.setColorFilter(color, PorterDuff.Mode.SCREEN);

如何使背景四舍五入?
发布于 2018-02-28 11:06:57
您可以使用DrawableResource创建图层表。为了使背景四舍五入创建新的DrawableResource,让我们将其命名为ic_pen_rounded,并将下一段代码放入该文件中:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="#8df"/>
<size
android:width="100dp"
android:height="100dp" />
</shape>
</item>
<item android:drawable="@drawable/ic_pen" />
</layer-list>那么在创建Drawable时只需使用这个MenuItem
menu.add(Menu.NONE, 1, Menu.NONE, "Pen")
.setIcon(R.drawable.ic_pen_round)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);还可以去掉设置VectorDrawable背景的行。
menuItem.getIcon().setTint(color);menuItem.setColorFilter(color, PorterDuff.Mode.SCREEN);您可以在下一行的ic_pen_rounded.xml中设置图标背景:
<solid android:color="#8df"/>这是我的结果:

更新-如何在运行时更改图标背景色
id添加到layer-list中的ShapeDrawable中menuItem图标:
LayerDrawable layerDrawable = (LayerDrawable) menuItem.getIcon();item并设置颜色:
layerDrawable.findDrawableByLayerId(R.id.background);icon.setColor(Color.RED);https://stackoverflow.com/questions/49026250
复制相似问题