如何在XML中重复使用定义的Drawable并使用不同的颜色

3

当使用单一颜色定义可绘制对象时:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="oval">
<corners android:radius="10dip"/>
<solid android:color="#FF7C71BF"/>

并被用于某些项目的布局中,如:

android:background="@drawable/oval_shape"

如果我想在布局XML中的多个地方重复使用这个drawable,但是颜色不同,该怎么做?(可以在代码中重新分配颜色,只想知道是否可以使用XML完成)。

2个回答

3

以下是仅适用于Lollipop及更高版本的解决方案:

将颜色设置为白色:

    <solid android:color="#FFFFFFFF"/>

然后在视图上使用 backgroundTintbackgroundTintMode 属性:

        <View
            android:backgroundTint="#FF00FF00"
            android:backgroundTintMode="multiply"
            ....

在这个例子中,它应该是绿色的。
对于KitKat及更早版本,这些属性不存在,因此您需要使用代码:
        setColorFilter(Color.GREEN, Mode.MULTIPLY);

这里有一个教程,讲解如何给你的下一个Android用户界面添加色调。请点击链接查看。

0

相信我,你不能用XML做到这一点。

在Java代码中,只需按照以下方式编写:

View v = findViewById(R.id.view_id);
LayerDrawable bg = (LayerDrawable)v.getBackground();
final GradientDrawable shape = (GradientDrawable)   bg.findDrawableByLayerId(R.id.drawable_id);
shape.setColor([any color]);

谢谢Amir!我们知道它可以在代码中完成,只是想知道是否有一种在XML中完成的方法。 - lannyf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接