我正在尝试找到重用资源文件的最佳方法。在这个例子中,我正在尝试为Android创建一个鬼按钮。我有一个定义背景的鬼按钮可绘制xml文件,但我希望能够指定颜色(特别是不使用使用基于主题的定义颜色)。
ghost.xml:
<shape
android:shape="rectangle">
<corners android:radius="@dimen/ghost_button_corner" />
<solid android:color="@android:color/transparent" />
<stroke android:width="@dimen/ghost_button_stroke_size" android:color="?attr/ghost_color" /></shape>
ghost_style.xml:
<!-- STYLABLE -->
<attr name="ghost_color" format="reference" />
<!-- STYLES -->
<style name="GhostButtonBlack" parent="@style/GhostButton">
<item name="ghost_color">@android:color/black</item>
</style>
<style name="GhostButtonWhite" parent="@style/GhostButton">
<item name="ghost_color">@android:color/white</item>
</style>
<!-- BASE -->
<style name="GhostButton" parent="android:style/Widget.Button">
<item name="android:textSize">@dimen/ghost_button_text_size</item>
<item name="android:textColor">?attr/ghost_color</item>
<item name="android:background">@drawable/ghost</item>
</style>
layout.xml中的:
<Button
style="@style/GhostButtonWhite"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="5dp"
android:text="White Ghost Button" />
但我现在遇到以下异常:
Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 5
at android.content.res.TypedArray.getColorStateList(TypedArray.java:425)
at android.widget.TextView.<init>(TextView.java:987)
注意 我认识到这种造型可以通过代码完成。我理想的解决方案是没有代码;只是资源。
答案 0 :(得分:0)
我认为你应该从你的形状中获得GradientDrawable并应用这样的不同颜色程序:
GradientDrawable mygrad = (GradientDrawable) view.getBackground();
color = inflater.getContext().getResources().getColor(yourcolorinstyles);
mygrad.setColor(color);