我的Android应用程序AppTheme
和AppThemeDark
使用了两个主题。我在主题定义中为每个设置了一个自定义按钮样式:
<!-- Theme definitions -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
...
<item name="android:buttonStyle">@style/ButtonStyle</item>
...
</style>
<style name="AppThemeDark" parent="Theme.AppCompat.DayNight.NoActionBar">
...
<item name="android:buttonStyle">@style/ButtonStyleDark</item>
...
</style>
<!-- Button styles -->
<style name="ButtonStyle" parent="@style/Widget.AppCompat.Button">
<item name="android:ellipsize">end</item>
<item name="android:maxLines">2</item>
</style>
<style name="ButtonStyleDark" parent="ButtonStyle">
<item name="android:background">@drawable/gray_button_bg</item>
</style>
请注意,我的AppTheme按钮ButtonStyle不会覆盖Widget.AppCompat.Button
的背景,但AppThemeDark的按钮样式会继承ButtonStyle并更改背景。
现在,我想用特殊按钮的新自定义样式扩展buttonStyle,例如PrimaryButton
。在AppTheme的情况下,我不想改变按钮的背景。在AppThemeDark案例中,我做想要更改按钮的背景。
我想定义PrimaryButton并让它继承背景(在AppTheme的情况下)或使用新的背景(AppThemeDark)。像这样:
<style name="PrimaryButton">
<item name="android:background">?attr/drawablePrimaryButtonBackground</item>
</style>
但据我所知,没有办法在AppThemeDark中将属性定义为新的drawable,AppTheme定义为“从父级继承”。设置为透明显然使AppTheme中的按钮背景透明。
我唯一的选择是在Widget.AppCompat.Button中弄清楚什么是drawable用于背景并在本地定义它?
答案 0 :(得分:2)
回答我自己的问题......
<强> attrs.xml:强>
<attr name="stylePrimaryButton" format="reference" />
<强> styles.xml:强>
<!-- Theme definitions -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
...
<item name="stylePrimaryButton">@style/PrimaryButton</item>
...
</style>
<style name="AppThemeDark" parent="Theme.AppCompat.DayNight.NoActionBar">
...
<item name="stylePrimaryButton">@style/PrimaryButtonDark</item>
...
</style>
<!-- Primary button styles -->
<style name="PrimaryButton">
<!-- no need to override anything -->
</style>
<style name="PrimaryButtonDark">
<item name="android:background">@drawable/dark_background</item>
</style>
<强> layout.xml:强>
<Button style="?attr/stylePrimaryButton"
...