我想使用相同的drawable(具有不同的颜色)作为一个布局中所有按钮的背景。
抽拉/ my_vector.xml
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="60px"
android:width="360px"
android:viewportHeight="60"
android:viewportWidth="360" >
<path
android:name="bottom"
android:pathData="M 0,60 L 360,60"
android:strokeColor="?attr/testColor"
android:strokeWidth="4" />
</vector>
如果我直接替换strokeColor
值[android:strokeColor="#ffff0000"
]
但根据要求,背景可以有不同的颜色。这就是我添加?attr/testColor
并希望使用样式定义它的原因。
值/ attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<declare-styleable name="dummyStyle">
<attr name="testColor" format="color|reference" />
</declare-styleable>
</resources>
值/ styles.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android"
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- <item name="testColor">#ff0000ff</item> -->
</style>
<style name="MyButton" parent="android:Widget.DeviceDefault.Button">
<item name="android:background">@drawable/my_vector</item>
</style>
<style name="MyButton.Green">
<item name="testColor">#ff00ff00</item>
</style>
<style name="MyButton.Red">
<item name="testColor">#ffff0000</item>
</style>
</resources>
layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<Button
android:layout_marginTop="10px"
android:id="@+id/test01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/MyButton.Green"
android:text="Test01" />
<Button
android:layout_marginTop="10px"
android:id="@+id/test02"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/MyButton.Red"
android:text="Test02" />
</LinearLayout>
什么有效:
如果我在testColor
中取消注释AppTheme
,则所有按钮都会以蓝色线条作为背景。
什么行不通:
如果我通过在Button上应用它来使用具有不同颜色的两种不同样式(MyButton.Green,MyButton.Red),我得到的只是透明背景。
答案 0 :(得分:0)
尝试明确引用您的父样式public interface MyOptions extends DataflowPipelineOptions {
// Common options here.
@Override
@Default.Class(DataflowPipelineRunner.class)
Class<? extends PipelineRunner<?>> getRunner();
}
...
MyOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().as(MyOptions.class);