菜单项。 ColorFilter。圆形背景

问题描述 投票:1回答:1

我使用矢量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;
}

我有可变的变量“颜色”。对于Android版> = Lollipop我使用setTin(颜色)

menuItem.getIcon().setTint(color);

对于Android <= Lollipop我想使用setColorFilter(color,PorterDuff.Mode.SCREEN)。原来这样的背景(方形)

menuItem.setColorFilter(color, PorterDuff.Mode.SCREEN);

enter image description here

如何使这个背景四舍五入?

android menu menuitem android-vectordrawable
1个回答
0
投票

你可以使用DrawableResource创建layer-list。为了使背景四舍五入创建新的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"/>

这是我的结果:

enter image description here

更新 - 如何在运行时更改图标背景颜色

  1. 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>
  2. 获取menuItem图标: LayerDrawable layerDrawable = (LayerDrawable) menuItem.getIcon();
  3. 通过id和设置颜色查找背景itemGradientDrawable icon = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.background); icon.setColor(Color.RED);
© www.soinside.com 2019 - 2024. All rights reserved.