В моем приложении у меня есть две темы (светлые и темные), и я хочу, чтобы все мои CardView
меняли свой цвет фона в зависимости от выбранной темы.
Что мне не нравится не:
<android.support.v7.widget.CardView
style="@style/CardView.MyBlue"
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal">
Вышеприведенный код не является динамическим. Мне нужно, чтобы мои два стиля автоматически применялись в зависимости от того, выбрана ли светлая или темная тема.
То, что у меня сейчас, не работает:
<style name="AppTheme.Light" parent="Theme.AppCompat.Light">
...
<item name="cardViewStyle">@style/CardViewStyle.Light</item>
</style>
<style name="AppTheme.Dark" parent="Theme.AppCompat">
...
<item name="cardViewStyle">@style/CardViewStyle.Dark</item>
</style>
<style name="CardViewStyle.Light" parent="CardView">
<item name="cardBackgroundColor">@color/cardview_dark_background</item>
</style>
<style name="CardViewStyle.Dark" parent="CardView">
<item name="cardBackgroundColor">@color/cardview_light_background</item>
</style>
Я где-то читал, что вы можете определить файл styleable.xml
в /res/values/
, чтобы ввести слово cardViewStyle
, поэтому я сделал это:
styleable.xml:
<resources>
<declare-styleable name="AppTheme">
<attr name="cardViewStyle" format="reference" />
</declare-styleable>
</resources>
Update
Аналогичный вопрос здесь без ответа.