android - 我可以覆盖可绘制形状的某些属性吗?

标签 android android-drawable shapedrawable

我有两个按钮,它们的形状相同,只是颜色不同

b1.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="10dp" />
    <stroke android:width="5px" android:color="#000000" />
    <solid
        android:color="#ff0000"/>
</shape>

b2.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="10dp" />
    <stroke android:width="5px" android:color="#000000" />
    <solid
        android:color="#00ff00"/>
</shape>

布局.xml

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/b1"
    android:text="B1" />


<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/b2"
    android:text="B2" />

如果我想创建 100 个不同颜色的按钮,我需要创建 100 个可绘制的 xml。

我可以只创建一个可绘制的 xml,然后覆盖布局 xml 中的颜色或其他属性吗?

最佳答案

不,你不能通过 XML。 XML是固定元素,如果需要动态处理,使用Java。

在您的特定情况下,您可以尝试使用 Drawable paint 和 ColorFilter 来实现您需要的效果,例如:

Button b1 = (Button) findViewById(R.id.button1);
ShapeDrawable sd = (ShapeDrawable) b1.getBackground();
sb.getPaint().setColor(color);
sb.setColorFilter(... something);

关于android - 我可以覆盖可绘制形状的某些属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31286941/

相关文章:

android - 如何检测在 Canvas 上绘制的 shapedrawable 是否被触摸?

android - React-native google signin 给出开发者错误

android - 自定义进度条

android - 最终的 .apk 是否包含未引用/使用的图像?

android - XXXHDPI 设备不同分辨率的图像加载问题

android - 如何设置形状可绘制渐变中心的绝对(不是 %)位置?

Android - 圆角矩形内的圆角矩形

java - 如何在多个 Activity 中传递字符串

java - Hashmap返回空值问题

java - 如何在java类中获取图层列表项ID?