Как добавить несколько атрибутов темы к одному и тому же упражнению в манифесте Android? - PullRequest
14 голосов
/ 14 мая 2011

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

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

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

android:style/Theme.Light"

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

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

Ответы [ 2 ]

35 голосов
/ 14 мая 2011

Вы не можете использовать более одной темы одновременно в своем манифесте.

Я считаю, что есть тема 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 чтобы посмотреть, как они сделаны.

3 голосов
/ 25 апреля 2015

Вам понадобится как минимум 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>

Извлечение моего блога для полного руководства.

...