在定义形状时,Android不会应用背景颜色

时间:2015-10-13 19:39:54

标签: android

我试图在我的应用中为按钮创建样式。为了做到这一点,我创建了一个带有角标记的可绘制文件。我还为不同的按钮状态(正常和禁用)创建了不同的样式。当我在不设置背景属性的情况下应用样式时,按钮具有正确的颜色。但是当我使用我的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中定义按钮的背景颜色,但我想保留样式并使其有效(我希望将形状和样式分开)。
你有什么想法吗?

1 个答案:

答案 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" />