我可以覆盖可绘制形状的某些属性吗?
Can I override some attribute of drawable shape?
我有两个按钮,它们的形状相同,只是颜色不同
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>
layout.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 个 drawable 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);
我有两个按钮,它们的形状相同,只是颜色不同
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>
layout.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 个 drawable 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);