Вам понадобится как минимум 2 стиля, лучше всего наследовать от базовых стилей, например, Theme.Material
вариантов или если вы используете appcompat
, то Theme.AppCompat
вариантов.В каждом стиле значения переопределения, такие как цвета, рисунки и т. Д., Имеют значения, характерные для темы.
values / styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- original theme attributes -->
...
<item name="android:textColorPrimary">#FFFFFF</item>
</style>
<style name="AppTheme.Dark" parent="Theme.AppCompat">
<!-- alternative theme attributes -->
...
<item name="android:textColorPrimary">#000000</item>
</style>
Этого будет достаточно, если вы толькоиспользуйте в ваших макетах атрибуты framework или appcompat
(например, colorAccent
, android:textColorPrimary
и т. д.).Но если вам нужны ваши собственные атрибуты (например, нарисованный с цветом, который отличается от темы), вам нужно будет определить пользовательские атрибуты .
values / attrs.xml
<attr name="themedMenuStoryDrawable" format="reference" />
<attr name="themedMenuCommentDrawable" format="reference" />
...
Укажите специфичные для темы значения для ваших пользовательских атрибутов:
values / styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- original theme attributes -->
...
<item name="themedMenuStoryDrawable">@drawable/ic_subject_white_24dp</item>
<item name="themedMenuCommentDrawable">@drawable/ic_mode_comment_white_24dp</item>
</style>
<style name="AppTheme.Dark" parent="Theme.AppCompat">
<!-- alternative theme attributes -->
...
<item name="themedMenuStoryDrawable">@drawable/ic_subject_black_24dp</item>
<item name="themedMenuCommentDrawable">@drawable/ic_mode_comment_black_24dp</item>
</style>
Затем обратитесь кВаши пользовательские атрибуты с префиксом ?attr/
в макетах, меню и т. д .:
menu / my_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@id/menu_comment"
android:icon="?attr/themedMenuCommentDrawable" />
<item android:id="@id/menu_story"
android:icon="?attr/themedMenuStoryDrawable" />
</menu>
Извлечение моего блога для полного руководства.