Я использую две темы для приложения для Android, AppTheme
и AppThemeDark
. Я создал пользовательский стиль кнопки для каждого в определениях темы:Переопределить фон Android в пользовательском стиле для одной темы, но не другой
<!-- 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 i do хотите изменить фон кнопки.
Я хотел бы определить PrimaryButton и иметь либо наследовать фон (в случае AppTheme), либо использовать новый фон (AppThemeDark). Что-то вроде этого:
<style name="PrimaryButton">
<item name="android:background">?attr/drawablePrimaryButtonBackground</item>
</style>
Но, насколько я могу сказать, что нет никакого способа определить атрибут в AppThemeDark как новая вытяжка и AppTheme как «наследует от родителей». Очевидно, что настройка прозрачности делает кнопку фона в AppTheme прозрачной.
Является ли мой единственный способ выяснить, что drawable используется для фона в Widget.AppCompat.Button и определить его локально?