如何在xml中重用不同颜色的已定义drawable

时间:2016-10-10 17:21:56

标签: android android-drawable

使用一种颜色定义drawable:

<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 个答案:

答案 0 :(得分:2)

这是一个只适用于Lollipop及以后的解决方案:

使颜色变白:

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

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

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

在这个例子中,它是绿色的。

对于KitKat及更早版本,这些属性不存在,因此您不得不求助于代码:

        setColorFilter(Color.GREEN, Mode.MULTIPLY);

Here's a tutorial for this method.

答案 1 :(得分: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]);