我试图在我的应用中为按钮创建样式。为了做到这一点,我创建了一个带有角标记的可绘制文件。我还为不同的按钮状态(正常和禁用)创建了不同的样式。当我在不设置背景属性的情况下应用样式时,按钮具有正确的颜色。但是当我使用我的drawable文件设置background属性时,style.xml中定义的文本颜色有效,但不是背景颜色。这是代码:
values / style.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:background">@color/background</item>
<item name="android:textColor">@color/text_color</item>
</style>
<style name="ButtonStyle">
<item name="android:background">@color/button_color</item>
</style>
<style name="ButtonDisableStyle">
<item name="android:background">@color/button_color_disabled</item>
<item name="android:textColor">@color/buttonText_color_disabled</item>
</style>
drawable / button_shape.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
android:radius="5dp" />
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp" />
</shape>
main_activity:
<Button
android:id="@+id/newButton"
android:text="@string/generate_first"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="30"
android:background="@drawable/button_shape"
/>
我看到几篇关于同样问题的文章,我知道可以在drawable / button_shape.xml中定义按钮的背景颜色,但我想保留样式并使其有效(我希望将形状和样式分开)。
你有什么想法吗?
答案 0 :(得分:0)
最后,经过更多的研究,我找到了解决方案。我为按钮创建了3个xml形状文件,对应3种不同的状态。然后我创建了第4个xml形状文件,其中包含其他3个。
最后,我将第4个形状的xml文件引用到按钮样式中(在values / style.xml中)。这是代码:
drawable / button_disabled.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/buttonText_color_disabled"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius= "5dp" />
</shape>
drawable / button_pressed.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/button_color_pressed"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius= "5dp" />
</shape>
可拉伸/ button_enabled.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/button_color"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius= "5dp" />
</shape>
drawable / button.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:drawable="@drawable/button_disabled" />
<item
android:state_pressed="true"
android:state_enabled="true"
android:drawable="@drawable/button_pressed" />
<item
android:state_enabled="true"
android:drawable="@drawable/button_enabled" />
</selector>
values / style.xml:
<style name="Custom_button" parent="@android:style/Widget.Button">
<item name="android:gravity">center_vertical|center_horizontal</item>
<item name="android:textColor">@color/text_color</item>
<item name="android:textSize">16dip</item>
<item name="android:textStyle">bold</item>
<item name="android:background">@drawable/button</item>
<item name="android:clickable">true</item>
</style>
main_activity:
<Button
android:id="@+id/newButton"
android:text="@string/generate_first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_below="@id/app_info"
android:layout_centerHorizontal="true"
android:layout_marginTop="35dp"
android:layout_marginBottom="50dp"
style="@style/Custom_button" />