以可绘制的

时间:2015-10-04 04:41:35

标签: android android-layout android-xml android-drawable

我正在我的菜单中添加一个项目(带图标),如下所示:

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)的颜色?

4 个答案:

答案 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)

我不知道这是否是最佳方式,但它确实有效。

  1. 获取对drawable的引用

    如果要设置drawable的颜色,然后添加subItem

    LayerDrawable drawable = (LayerDrawable)getResources().getDrawable(R.drawable.user_bg);

    如果您想在添加项目后更改颜色

    LayerDrawable drawable = (LayerDrawable)subMenu.getItem().getIcon()

  2. 调用Drawable.Mutate()

    drawable .Mutate();

    有关说明,请参阅this回答

  3. 的第2项
  4. 创建颜色可绘制

    ColorDrawable newColor = new ColorDrawable(Color.parseColor("#000000"));

  5. 设置/重置颜色

    drawable.setDrawableByLayerId(R.id.user_color, newColor);

  6. 重绘可绘制

    drawable.invalidateSelf();

答案 3 :(得分:0)

请尝试以下代码:

Drawable mDrawable = getResources().getDrawable(R.drawable.circle_drawable);
mDrawable.setColorFilter(new PorterDuffColorFilter(Color.RED,  PorterDuff.Mode.SCREEN));

使用setColorFilter()函数,我们可以以编程方式更改可绘制的颜色。

我希望它对您有用