菜单项。 ColorFilter。圆形背景

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜单项。 ColorFilter。圆形背景相关的知识,希望对你有一定的参考价值。

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

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

答案

你可以使用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);

以上是关于菜单项。 ColorFilter。圆形背景的主要内容,如果未能解决你的问题,请参考以下文章

Android:通过更改片段更改菜单项的可见性

隐藏/显示不同片段的操作栏选项菜单项

选择导航菜单项时不会替换上一个片段

无法接收点击片段中的菜单项

片段的菜单项 onClickListener

Android - 导航抽屉 - 与动态菜单项重叠的片段