无法使用主题更改按钮背景
Cannot change button background using themes
我想为我的应用程序中的按钮设置自定义样式,但我尝试设置自定义主题但它不起作用。例如,这不会改变背景
<Button
android:theme="@style/CustomTheme"
... />
<style name="CustomTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:background">@color/colorPrimary</item>
</style>
如果我使用样式做同样的事情,效果很好
发生的事情是背景属性被 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>
我想为我的应用程序中的按钮设置自定义样式,但我尝试设置自定义主题但它不起作用。例如,这不会改变背景
<Button
android:theme="@style/CustomTheme"
... />
<style name="CustomTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:background">@color/colorPrimary</item>
</style>
如果我使用样式做同样的事情,效果很好
发生的事情是背景属性被 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>