我使用vector drawable for 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;
}
我有变量" color"。 对于Android版本> = Lollipop我使用setTin(颜色)
menuItem.getIcon().setTint(color);
对于Android< = Lollipop我想使用setColorFilter(color,PorterDuff.Mode.SCREEN)。事实证明这样的背景(正方形)
menuItem.setColorFilter(color, PorterDuff.Mode.SCREEN);
如何使这个背景四舍五入?
答案 0 :(得分:0)
您可以使用layer-list创建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
添加到ShapeDrawable
内的layer-list
:
<item
android:id="@+id/background">
<shape android:shape="oval">
<solid android:color="#8df"/>
<size
android:width="100dp"
android:height="100dp" />
</shape>
</item>
获取menuItem
图标:
LayerDrawable layerDrawable = (LayerDrawable) menuItem.getIcon();
按ID查找背景item
并设置颜色:
GradientDrawable icon = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.background);
icon.setColor(Color.RED);