我正在我的菜单中添加一个项目(带图标),如下所示:
subMenu.add(user.getName()).setIcon(R.drawable.user_bg);
user_bg
可绘制布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/user_color">
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="#000000"
/>
<size
android:width="100dp"
android:height="100dp"
/>
</shape>
</item>
<item
android:drawable="@drawable/user"
android:adjustViewBounds="true"
android:scaleType="fitXY"
/>
</layer-list>
如何在添加新项目后以编程方式更改drawable(#000000
)的颜色?
答案 0 :(得分:0)
以编程方式创建drawable,设置其颜色,然后在菜单上设置它。类似的东西:
require 'date'
new_date = Time.at(960000188940).to_datetime
#=> Wed, 13 Mar 32391 12:39:00 +053
答案 1 :(得分:0)
int red = 102, green = 34, blue = 100;
drawable.setColorFilter(red,Mode.ADD);
drawable.setColorFilter(green,Mode.ADD);
drawable.setColorFilter(blue,Mode.ADD);
注意:这将删除您的drawable中的Tint(如果有的话)。
同时检查this question,以获取更多信息abot setColorFilter()
方法
答案 2 :(得分:0)
我不知道这是否是最佳方式,但它确实有效。
获取对drawable的引用
如果要设置drawable的颜色,然后添加subItem
LayerDrawable drawable = (LayerDrawable)getResources().getDrawable(R.drawable.user_bg);
或的
如果您想在添加项目后更改颜色
LayerDrawable drawable = (LayerDrawable)subMenu.getItem().getIcon()
调用Drawable.Mutate()
drawable .Mutate();
有关说明,请参阅this回答
创建颜色可绘制
ColorDrawable newColor = new ColorDrawable(Color.parseColor("#000000"));
设置/重置颜色
drawable.setDrawableByLayerId(R.id.user_color, newColor);
重绘可绘制
drawable.invalidateSelf();
答案 3 :(得分:0)
请尝试以下代码:
Drawable mDrawable = getResources().getDrawable(R.drawable.circle_drawable);
mDrawable.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SCREEN));
使用setColorFilter()
函数,我们可以以编程方式更改可绘制的颜色。
我希望它对您有用