Как добавить несколько атрибутов тем к одной и той же активности в Android Manifest?
У меня есть андроид манифест с активностью, которую я хочу применить к стилям:
<activity android:label="@string/app_name" android:name="Language" android:theme="@android:style/Theme.NoTitleBar>
Как выглядит это сейчас, но сохраняя атрибут NoTitleBar, я хотел бы добавить этот атрибут:
android:style/Theme.Light"
Но я настолько новичок в Android, что не могу понять.
Пожалуйста, помогите!
Ответы
Ответ 1
В манифесте не может быть применено более одной темы.
Я считаю, что есть тема Theme.Light.NoTitleBar
, которая будет делать то, что вы хотите, но я покажу вам ниже, как вы можете сделать это самостоятельно и настроить больше.
Что вам нужно сделать, это создать тему, которая имеет либо Theme.NoTitleBar
, либо Theme.Light
, поскольку она родительская, и настраивает нужные вам биты. В этом случае самый простой способ - создать тему с Theme.Light
, поскольку она родительский и просто скрыть строку заголовка (вместо того, чтобы иметь Theme.NoTitleBar
в качестве родителя, а затем сделать все, что намного сложнее!).
Вы можете сделать это со следующим кодом в вашем themes.xml
файле в папке values
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- use the Android Light theme as the base for our own theme -->
<style name="MySuperTheme" parent="@android:style/Theme.Light">
<!-- hide the Window Title -->
<item name="android:windowNoTitle">true</item>
<!-- You could change the scrollbar, checkbox style, anything! -->
</style>
</resources>
Затем используйте android:theme="@style/MySuperTheme"
для своей деятельности (или вы можете применить ее ко всему вашему приложению, поместив ее в элемент приложения - если вы применяете стиль к индивидуальному действию и имеете один набор для всего приложения то стиль индивидуальной активности будет отображаться как таковой).
Посмотрите на Android themes.xml список всех вещей, которые вы можете настроить в своей собственной теме.
Вы также можете посмотреть все стили Android, чтобы посмотреть, как они сделаны.
Ответ 2
Вам понадобятся как минимум 2 стиля, наилучшим образом наследуемые от базовых стилей, например. Theme.Material
, или если вы используете варианты appcompat
, а затем Theme.AppCompat
. В каждом стиле переопределяют значения, такие как цвета, чертежи и т.д. С конкретными значениями темы.
<сильные > значения /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>
Этого будет достаточно, если вы используете только атрибуты рамки или appcompat
(например, colorAccent
, android:textColorPrimary
и т.д.) в своих макетах. Но если вам нужны ваши собственные атрибуты (например, с возможностью рисования с цветом, отличным для каждой темы), вам нужно будет определить пользовательские атрибуты.
<сильные > значения /attrs.xml
<attr name="themedMenuStoryDrawable" format="reference" />
<attr name="themedMenuCommentDrawable" format="reference" />
...
Укажите специфичные для темы значения для ваших пользовательских атрибутов:
<сильные > значения /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/
в макетах, меню и т.д.:
меню /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>
Зайдите в мой пост в блоге для полного руководства.