Подтвердить что ты не робот

Как добавить несколько атрибутов тем к одной и той же активности в Android Manifest?

У меня есть андроид манифест с активностью, которую я хочу применить к стилям:

 <activity android:label="@string/app_name" android:name="Language" android:theme="@android:style/Theme.NoTitleBar>

Как выглядит это сейчас, но сохраняя атрибут NoTitleBar, я хотел бы добавить этот атрибут:

android:style/Theme.Light"

Но я настолько новичок в Android, что не могу понять.

Пожалуйста, помогите!

4b9b3361

Ответ 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>

Зайдите в мой пост в блоге для полного руководства.