首页 > 解决方案 > 无法使用主题更改按钮背景

问题描述

我想在我的应用程序中为按钮设置自定义样式,但我尝试设置自定义主题,但它不起作用。例如,这不会改变背景

<Button
  android:theme="@style/CustomTheme"
  ... />

<style name="CustomTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   <item name="android:background">@color/colorPrimary</item>
</style>

如果我使用样式做同样的事情,它工作正常

标签: androidandroid-layoutandroid-themeandroid-styles

解决方案


发生的事情是 background 属性被Button. 默认样式在您的主题中设置,如果您查看Theme.AppCompat.Light.DarkActionBar(您要继承的主题),您将看到以下继承结构:

Theme.AppCompat.Light.DarkActionBar
    Base.Theme.AppCompat.Light.DarkActionBar
        Base.Theme.AppCompat.Light
            Base.V7.Theme.AppCompat.Light

Base.V7.Theme.AppCompat.Light您将在其中找到属性buttonStyle定义,这是Button元素的默认样式:

<item name="buttonStyle">@style/Widget.AppCompat.Button</item>

同样,如果您看一下,Widget.AppCompat.Button您会发现它继承自Base.Widget.AppCompat.Button并设置android:background属性(在其他属性之间)。

所以,为了改变Button主题的风格,你应该使用buttonStyle属性。您最安全的选择是创建一个继承自的新样式Widget.AppCompat.Button(因此您不会丢失在那里设置的所有其他属性)并在那里设置 android:background 属性:

<style name="CustomStyle" parent="Widget.AppCompat.Button">
    <item name="android:background">@color/colorPrimary</item>
</style>

<style name="CustomTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   <item name="buttonStyle">@style/CustomStyle</item>
</style>

推荐阅读