Стили и темы

Попробуйте способ Compose
Jetpack Compose — рекомендуемый набор инструментов пользовательского интерфейса для Android. Узнайте, как работать с темами в Compose.

Стили и темы на Android позволяют отделить детали дизайна вашего приложения от структуры и поведения пользовательского интерфейса, аналогично таблицам стилей в веб-дизайне.

Стиль — это набор атрибутов, определяющих внешний вид одного View . Стиль может определять такие атрибуты, как цвет шрифта, размер шрифта, цвет фона и многое другое.

Тема — это набор атрибутов, применяемых ко всему приложению, активности или иерархии представлений, а не только к отдельному представлению. Когда вы применяете тему, каждое представление в приложении или активности применяет каждый из поддерживаемых им атрибутов темы. Темы также могут применять стили к элементам, не являющимся представлениями, таким как строка состояния и фон окна.

Стили и темы объявляются в файле ресурсов стилей в res/values/ , обычно называемом styles.xml .

Рисунок 1. Две темы, примененные к одному и тому же действию: Theme.AppCompat (слева) и Theme.AppCompat.Light (справа).

Темы против стилей

Темы и стили имеют много общего, но они используются для разных целей. Темы и стили имеют одинаковую базовую структуру — пару ключ-значение, которая сопоставляет атрибуты с ресурсами .

Стиль определяет атрибуты для определенного типа представления. Например, один стиль может определять атрибуты кнопки. Каждый атрибут, указанный в стиле, является атрибутом, который можно задать в файле макета. Извлечение всех атрибутов в стиль упрощает их использование и поддержку в нескольких виджетах.

Тема определяет набор именованных ресурсов, на которые могут ссылаться стили, макеты, виджеты и т. д. Темы назначают семантические имена, например colorPrimary , ресурсам Android.

Стили и темы должны работать вместе. Например, у вас может быть стиль, который указывает, что одна часть кнопки — colorPrimary , а другая — colorSecondary . Фактические определения этих цветов предоставляются в теме. Когда устройство переходит в ночной режим, ваше приложение может переключиться со своей «светлой» темы на «темную», изменив значения для всех этих имен ресурсов. Вам не нужно менять стили, поскольку стили используют семантические имена, а не конкретные определения цветов.

Дополнительную информацию о том, как темы и стили работают вместе, можно найти в записи блога «Стили Android: темы и стили» .

Создать и применить стиль

Чтобы создать новый стиль, откройте файл res/values/styles.xml вашего проекта. Для каждого стиля, который вы хотите создать, выполните следующие действия:

  1. Добавьте элемент <style> с именем, которое однозначно идентифицирует стиль.
  2. Добавьте элемент <item> для каждого атрибута стиля, который вы хотите определить. name в каждом элементе указывает атрибут, который вы в противном случае используете как атрибут XML в вашем макете. Значение в элементе <item> является значением для этого атрибута.

Например, предположим, что вы определяете следующий стиль:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="GreenText" parent="TextAppearance.AppCompat">
        <item name="android:textColor">#00FF00</item>
    </style>
</resources>

Вы можете применить стиль к представлению следующим образом:

<TextView
    style="@style/GreenText"
    ... />

Каждый атрибут, указанный в стиле, применяется к этому представлению, если представление его принимает. Представление игнорирует любые атрибуты, которые оно не принимает.

Однако вместо применения стиля к отдельным представлениям вы обычно применяете стили в качестве темы для всего приложения, действия или коллекции представлений, как описано в другом разделе этого руководства.

Расширьте и настройте стиль

При создании собственных стилей всегда расширяйте существующий стиль из фреймворка или библиотеки поддержки, чтобы сохранить совместимость со стилями пользовательского интерфейса платформы. Чтобы расширить стиль, укажите стиль, который вы хотите расширить, с помощью parent атрибута. Затем вы можете переопределить унаследованные атрибуты стиля и добавить новые.

Например, вы можете унаследовать внешний вид текста по умолчанию платформы Android и изменить его следующим образом:

<style name="GreenText" parent="@android:style/TextAppearance">
    <item name="android:textColor">#00FF00</item>
</style>

Однако всегда наследуйте основные стили приложения из библиотеки поддержки Android. Стили в библиотеке поддержки обеспечивают совместимость, оптимизируя каждый стиль для атрибутов пользовательского интерфейса, доступных в каждой версии. Стили библиотеки поддержки часто имеют название, похожее на название стиля из платформы, но с включенным AppCompat .

Чтобы унаследовать стили из библиотеки или собственного проекта, объявите имя родительского стиля без части @android:style/ показанной в предыдущем примере. Например, следующий пример наследует стили оформления текста из библиотеки поддержки:

<style name="GreenText" parent="TextAppearance.AppCompat">
    <item name="android:textColor">#00FF00</item>
</style>

Вы также можете наследовать стили — за исключением стилей платформы — расширяя имя стиля с помощью точечной нотации вместо использования parent атрибута. То есть, добавьте к имени вашего стиля префикс в виде имени стиля, который вы хотите унаследовать, разделенного точкой. Обычно вы делаете это только при расширении собственных стилей, а не стилей из других библиотек. Например, следующий стиль наследует все стили из GreenText в предыдущем примере, а затем увеличивает размер текста:

<style name="GreenText.Large">
    <item name="android:textSize">22dp</item>
</style>

Вы можете продолжать наследовать подобные стили столько раз, сколько захотите, добавляя в цепочку больше имен.

Чтобы узнать, какие атрибуты можно объявить с помощью тега <item> , обратитесь к таблице "Атрибуты XML" в различных справочниках по классам. Все представления поддерживают атрибуты XML из базового класса View , а многие представления добавляют свои собственные специальные атрибуты. Например, атрибуты XML TextView включают атрибут android:inputType , который можно применить к текстовому представлению, получающему ввод, например, к виджету EditText .

Применить стиль как тему

Вы можете создать тему так же, как вы создаете стили. Разница в том, как вы ее применяете: вместо применения стиля с атрибутом style к представлению, вы применяете тему с атрибутом android:theme либо к тегу <application> , либо к тегу <activity> в файле AndroidManifest.xml .

Например, вот как применить «тёмную» тему Material Design из библиотеки поддержки Android ко всему приложению:

<manifest ... >
    <application android:theme="@style/Theme.AppCompat" ... >
    </application>
</manifest>

А вот как применить «светлую» тему только к одному виду деятельности:

<manifest ... >
    <application ... >
        <activity android:theme="@style/Theme.AppCompat.Light" ... >
        </activity>
    </application>
</manifest>

Каждое представление в приложении или активности применяет стили, которые оно поддерживает из тех, которые определены в данной теме. Если представление поддерживает только некоторые атрибуты, объявленные в стиле, то оно применяет только эти атрибуты и игнорирует те, которые оно не поддерживает.

Начиная с Android 5.0 (уровень API 21) и Android Support Library v22.1, вы также можете указать атрибут android:theme для представления в вашем файле макета. Это изменяет тему для этого представления и любых дочерних представлений, что полезно для изменения цветовых палитр темы в определенной части вашего интерфейса.

Предыдущие примеры показывают, как применить тему, например Theme.AppCompat , которая поставляется библиотекой поддержки Android. Однако обычно вы хотите настроить тему в соответствии с брендом вашего приложения. Лучший способ сделать это — расширить эти стили из библиотеки поддержки и переопределить некоторые атрибуты, как описано в следующем разделе.

Иерархия стилей

Android предоставляет множество способов установки атрибутов в вашем приложении Android. Например, вы можете устанавливать атрибуты непосредственно в макете, применять стиль к представлению, применять тему к макету и даже устанавливать атрибуты программно.

При выборе стиля приложения помните об иерархии стилей Android. В общем, используйте темы и стили как можно чаще для обеспечения согласованности. Если вы указываете одни и те же атрибуты в нескольких местах, следующий список определяет, какие атрибуты будут применены в конечном итоге. Список упорядочен от наивысшего приоритета к низшему.

  1. Применение стилей на уровне символов или абзацев с использованием текстовых диапазонов к классам, производным от TextView .
  2. Применение атрибутов программным способом.
  3. Применение отдельных атрибутов непосредственно к представлению.
  4. Применение стиля к представлению.
  5. Стиль по умолчанию.
  6. Применение темы к коллекции представлений, действию или всему приложению.
  7. Применение определенных стилей, специфичных для представления, например, установка TextAppearance для TextView .

Рисунок 2. Стиль из span переопределяет стиль из textAppearance .

ТекстВнешний вид

Одним из ограничений стилей является то, что вы можете применить только один стиль к View . Однако в TextView вы также можете указать атрибут TextAppearance , который функционирует аналогично стилю, как показано в следующем примере:

<TextView
    ...
    android:textAppearance="@android:style/TextAppearance.Material.Headline"
    android:text="This text is styled via textAppearance!" />

TextAppearance позволяет вам определять стилизацию, специфичную для текста, оставляя стиль View доступным для других целей. Однако обратите внимание, что если вы определяете какие-либо атрибуты текста непосредственно в View или в стиле, эти значения переопределяют значения TextAppearance .

TextAppearance поддерживает подмножество атрибутов стилизации, которые предлагает TextView . Полный список атрибутов см. в TextAppearance .

Некоторые общие атрибуты TextView , не включенные в список, — lineHeight[Multiplier|Extra] , lines , breakStrategy и hyphenationFrequency . TextAppearance работает на уровне символов, а не на уровне абзацев, поэтому атрибуты, влияющие на весь макет, не поддерживаются.

Настройте тему по умолчанию

Когда вы создаете проект с помощью Android Studio, он по умолчанию применяет тему Material Design к вашему приложению, как определено в файле styles.xml вашего проекта. Этот стиль AppTheme расширяет тему из библиотеки поддержки и включает переопределения для атрибутов цвета, которые используются ключевыми элементами пользовательского интерфейса, такими как панель приложения и плавающая кнопка действия , если они используются. Таким образом, вы можете быстро настроить цветовой дизайн вашего приложения, обновив предоставленные цвета.

Например, ваш файл styles.xml выглядит примерно так:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Значения стилей на самом деле являются ссылками на другие цветовые ресурсы , определенные в файле res/values/colors.xml проекта. Это файл, который вы редактируете для изменения цветов. См. Обзор цветов в Material Design, чтобы улучшить пользовательский опыт с помощью динамического цвета и дополнительных пользовательских цветов.

Как только вы узнаете свои цвета, обновите значения в res/values/colors.xml :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--   Color for the app bar and other primary UI elements. -->
    <color name="colorPrimary">#3F51B5</color>

    <!--   A darker variant of the primary color, used for
           the status bar (on Android 5.0+) and contextual app bars. -->
    <color name="colorPrimaryDark">#303F9F</color>

    <!--   a secondary color for controls like checkboxes and text fields. -->
    <color name="colorAccent">#FF4081</color>
</resources>

Затем вы можете переопределить любые другие стили, которые захотите. Например, вы можете изменить цвет фона активности следующим образом:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ...
    <item name="android:windowBackground">@color/activityBackground</item>
</style>

Список атрибутов, которые вы можете использовать в своей теме, см. в таблице атрибутов на R.styleable.Theme . При добавлении стилей для представлений в вашем макете вы также можете найти атрибуты, просмотрев таблицу "XML attribute" в ссылках на класс представления. Например, все представления поддерживают атрибуты XML из базового класса View .

Большинство атрибутов применяются к определенным типам представлений, а некоторые применяются ко всем представлениям. Однако некоторые атрибуты темы, перечисленные в R.styleable.Theme , применяются к окну активности, а не к представлениям в макете. Например, windowBackground изменяет фон окна, а windowEnterTransition определяет анимацию перехода, которая будет использоваться при запуске активности. Для получения более подробной информации см. раздел Запуск активности с использованием анимации .

Библиотека поддержки Android также предоставляет другие атрибуты, которые вы можете использовать для настройки вашей темы, расширенной из Theme.AppCompat , например, атрибут colorPrimary , показанный в предыдущем примере. Их лучше всего просматривать в файле attrs.xml библиотеки .

Также есть различные темы, доступные в библиотеке поддержки, которые вы можете захотеть расширить вместо тех, что показаны в предыдущем примере. Лучшее место для просмотра доступных тем — файл themes.xml библиотеки .

Добавить стили, специфичные для версии

Если новая версия Android добавляет атрибуты темы, которые вы хотите использовать, вы можете добавить их в свою тему, сохраняя совместимость со старыми версиями. Все, что вам нужно, это еще один файл styles.xml , сохраненный в каталоге values , который включает квалификатор версии ресурса :

res/values/styles.xml        # themes for all versions
res/values-v21/styles.xml    # themes for API level 21+ only

Поскольку стили в файле values/styles.xml доступны для всех версий, ваши темы в values-v21/styles.xml могут их наследовать. Это означает, что вы можете избежать дублирования стилей, начав с «базовой» темы, а затем расширив ее в стилях, специфичных для вашей версии.

Например, чтобы объявить переходы окон для Android 5.0 (уровень API 21) и выше, вам нужно использовать новые атрибуты. Таким образом, ваша базовая тема в res/values/styles.xml может выглядеть так:

<resources>
    <!-- Base set of styles that apply to all versions. -->
    <style name="BaseAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryTextColor</item>
        <item name="colorAccent">@color/secondaryColor</item>
    </style>

    <!-- Declare the theme name that's actually applied in the manifest file. -->
    <style name="AppTheme" parent="BaseAppTheme" />
</resources>

Затем добавьте стили, специфичные для версии, в res/values-v21/styles.xml следующим образом:

<resources>
    <!-- extend the base theme to add styles available only with API level 21+ -->
    <style name="AppTheme" parent="BaseAppTheme">
        <item name="android:windowActivityTransitions">true</item>
        <item name="android:windowEnterTransition">@android:transition/slide_right</item>
        <item name="android:windowExitTransition">@android:transition/slide_left</item>
    </style>
</resources>

Теперь вы можете применить AppTheme в своем файле манифеста, и система выберет стили, доступные для каждой версии системы.

Дополнительную информацию об использовании альтернативных ресурсов для разных устройств см. в разделе Предоставление альтернативных ресурсов .

Настройте стили виджетов

Каждый виджет в фреймворке и библиотеке поддержки имеет стиль по умолчанию. Например, когда вы оформляете свое приложение с помощью темы из библиотеки поддержки, экземпляр Button оформляется с помощью стиля Widget.AppCompat.Button . Если вы хотите применить другой стиль виджета к кнопке, вы можете сделать это с помощью атрибута style в вашем файле макета. Например, следующее применяет стиль кнопки без границ библиотеки:

<Button
    style="@style/Widget.AppCompat.Button.Borderless"
    ... />

Если вы хотите применить этот стиль ко всем кнопкам, вы можете объявить его в buttonStyle вашей темы следующим образом:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="buttonStyle">@style/Widget.AppCompat.Button.Borderless</item>
    ...
</style>

Вы также можете расширить стили виджетов, как и любой другой стиль , а затем применить свой собственный стиль виджета в своем макете или теме.

Дополнительные ресурсы

Чтобы узнать больше о темах и стилях, ознакомьтесь со следующими дополнительными ресурсами:

Записи в блоге

,
Попробуйте способ Compose
Jetpack Compose — рекомендуемый набор инструментов пользовательского интерфейса для Android. Узнайте, как работать с темами в Compose.

Стили и темы на Android позволяют отделить детали дизайна вашего приложения от структуры и поведения пользовательского интерфейса, аналогично таблицам стилей в веб-дизайне.

Стиль — это набор атрибутов, определяющих внешний вид одного View . Стиль может определять такие атрибуты, как цвет шрифта, размер шрифта, цвет фона и многое другое.

Тема — это набор атрибутов, применяемых ко всему приложению, активности или иерархии представлений, а не только к отдельному представлению. Когда вы применяете тему, каждое представление в приложении или активности применяет каждый из поддерживаемых им атрибутов темы. Темы также могут применять стили к элементам, не являющимся представлениями, таким как строка состояния и фон окна.

Стили и темы объявляются в файле ресурсов стилей в res/values/ , обычно называемом styles.xml .

Рисунок 1. Две темы, примененные к одному и тому же действию: Theme.AppCompat (слева) и Theme.AppCompat.Light (справа).

Темы против стилей

Темы и стили имеют много общего, но они используются для разных целей. Темы и стили имеют одинаковую базовую структуру — пару ключ-значение, которая сопоставляет атрибуты с ресурсами .

Стиль определяет атрибуты для определенного типа представления. Например, один стиль может определять атрибуты кнопки. Каждый атрибут, указанный в стиле, является атрибутом, который можно задать в файле макета. Извлечение всех атрибутов в стиль упрощает их использование и поддержку в нескольких виджетах.

Тема определяет набор именованных ресурсов, на которые могут ссылаться стили, макеты, виджеты и т. д. Темы назначают семантические имена, например colorPrimary , ресурсам Android.

Стили и темы должны работать вместе. Например, у вас может быть стиль, который указывает, что одна часть кнопки — colorPrimary , а другая — colorSecondary . Фактические определения этих цветов предоставляются в теме. Когда устройство переходит в ночной режим, ваше приложение может переключиться со своей «светлой» темы на «темную», изменив значения для всех этих имен ресурсов. Вам не нужно менять стили, поскольку стили используют семантические имена, а не конкретные определения цветов.

Дополнительную информацию о том, как темы и стили работают вместе, можно найти в записи блога «Стили Android: темы и стили» .

Создать и применить стиль

Чтобы создать новый стиль, откройте файл res/values/styles.xml вашего проекта. Для каждого стиля, который вы хотите создать, выполните следующие действия:

  1. Добавьте элемент <style> с именем, которое однозначно идентифицирует стиль.
  2. Добавьте элемент <item> для каждого атрибута стиля, который вы хотите определить. name в каждом элементе указывает атрибут, который вы в противном случае используете как атрибут XML в вашем макете. Значение в элементе <item> является значением для этого атрибута.

Например, предположим, что вы определяете следующий стиль:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="GreenText" parent="TextAppearance.AppCompat">
        <item name="android:textColor">#00FF00</item>
    </style>
</resources>

Вы можете применить стиль к представлению следующим образом:

<TextView
    style="@style/GreenText"
    ... />

Каждый атрибут, указанный в стиле, применяется к этому представлению, если представление его принимает. Представление игнорирует любые атрибуты, которые оно не принимает.

Однако вместо применения стиля к отдельным представлениям вы обычно применяете стили в качестве темы для всего приложения, действия или коллекции представлений, как описано в другом разделе этого руководства.

Расширьте и настройте стиль

При создании собственных стилей всегда расширяйте существующий стиль из фреймворка или библиотеки поддержки, чтобы сохранить совместимость со стилями пользовательского интерфейса платформы. Чтобы расширить стиль, укажите стиль, который вы хотите расширить, с помощью parent атрибута. Затем вы можете переопределить унаследованные атрибуты стиля и добавить новые.

Например, вы можете унаследовать внешний вид текста по умолчанию платформы Android и изменить его следующим образом:

<style name="GreenText" parent="@android:style/TextAppearance">
    <item name="android:textColor">#00FF00</item>
</style>

Однако всегда наследуйте основные стили приложения из библиотеки поддержки Android. Стили в библиотеке поддержки обеспечивают совместимость, оптимизируя каждый стиль для атрибутов пользовательского интерфейса, доступных в каждой версии. Стили библиотеки поддержки часто имеют название, похожее на название стиля из платформы, но с включенным AppCompat .

Чтобы унаследовать стили из библиотеки или собственного проекта, объявите имя родительского стиля без части @android:style/ показанной в предыдущем примере. Например, следующий пример наследует стили оформления текста из библиотеки поддержки:

<style name="GreenText" parent="TextAppearance.AppCompat">
    <item name="android:textColor">#00FF00</item>
</style>

Вы также можете наследовать стили — за исключением стилей платформы — расширяя имя стиля с помощью точечной нотации вместо использования parent атрибута. То есть, добавьте к имени вашего стиля префикс в виде имени стиля, который вы хотите унаследовать, разделенного точкой. Обычно вы делаете это только при расширении собственных стилей, а не стилей из других библиотек. Например, следующий стиль наследует все стили из GreenText в предыдущем примере, а затем увеличивает размер текста:

<style name="GreenText.Large">
    <item name="android:textSize">22dp</item>
</style>

Вы можете продолжать наследовать подобные стили столько раз, сколько захотите, добавляя в цепочку больше имен.

Чтобы узнать, какие атрибуты можно объявить с помощью тега <item> , обратитесь к таблице "Атрибуты XML" в различных справочниках по классам. Все представления поддерживают атрибуты XML из базового класса View , а многие представления добавляют свои собственные специальные атрибуты. Например, атрибуты XML TextView включают атрибут android:inputType , который можно применить к текстовому представлению, получающему ввод, например, к виджету EditText .

Применить стиль как тему

Вы можете создать тему так же, как вы создаете стили. Разница в том, как вы ее применяете: вместо применения стиля с атрибутом style к представлению, вы применяете тему с атрибутом android:theme либо к тегу <application> , либо к тегу <activity> в файле AndroidManifest.xml .

Например, вот как применить «тёмную» тему Material Design из библиотеки поддержки Android ко всему приложению:

<manifest ... >
    <application android:theme="@style/Theme.AppCompat" ... >
    </application>
</manifest>

А вот как применить «светлую» тему только к одному виду деятельности:

<manifest ... >
    <application ... >
        <activity android:theme="@style/Theme.AppCompat.Light" ... >
        </activity>
    </application>
</manifest>

Каждое представление в приложении или активности применяет стили, которые оно поддерживает из тех, которые определены в данной теме. Если представление поддерживает только некоторые атрибуты, объявленные в стиле, то оно применяет только эти атрибуты и игнорирует те, которые оно не поддерживает.

Начиная с Android 5.0 (уровень API 21) и Android Support Library v22.1, вы также можете указать атрибут android:theme для представления в вашем файле макета. Это изменяет тему для этого представления и любых дочерних представлений, что полезно для изменения цветовых палитр темы в определенной части вашего интерфейса.

Предыдущие примеры показывают, как применить тему, например Theme.AppCompat , которая поставляется библиотекой поддержки Android. Однако обычно вы хотите настроить тему в соответствии с брендом вашего приложения. Лучший способ сделать это — расширить эти стили из библиотеки поддержки и переопределить некоторые атрибуты, как описано в следующем разделе.

Иерархия стилей

Android предоставляет множество способов установки атрибутов в вашем приложении Android. Например, вы можете устанавливать атрибуты непосредственно в макете, применять стиль к представлению, применять тему к макету и даже устанавливать атрибуты программно.

При выборе стиля приложения помните об иерархии стилей Android. В общем, используйте темы и стили как можно чаще для обеспечения согласованности. Если вы указываете одни и те же атрибуты в нескольких местах, следующий список определяет, какие атрибуты будут применены в конечном итоге. Список упорядочен от наивысшего приоритета к низшему.

  1. Применение стилей на уровне символов или абзацев с использованием текстовых диапазонов к классам, производным от TextView .
  2. Применение атрибутов программным способом.
  3. Применение отдельных атрибутов непосредственно к представлению.
  4. Применение стиля к представлению.
  5. Стиль по умолчанию.
  6. Применение темы к коллекции представлений, действию или всему приложению.
  7. Применение определенных стилей, специфичных для представления, например, установка TextAppearance для TextView .

Рисунок 2. Стиль из span переопределяет стиль из textAppearance .

ТекстВнешний вид

Одним из ограничений стилей является то, что вы можете применить только один стиль к View . Однако в TextView вы также можете указать атрибут TextAppearance , который функционирует аналогично стилю, как показано в следующем примере:

<TextView
    ...
    android:textAppearance="@android:style/TextAppearance.Material.Headline"
    android:text="This text is styled via textAppearance!" />

TextAppearance позволяет вам определять стилизацию, специфичную для текста, оставляя стиль View доступным для других целей. Однако обратите внимание, что если вы определяете какие-либо атрибуты текста непосредственно в View или в стиле, эти значения переопределяют значения TextAppearance .

TextAppearance поддерживает подмножество атрибутов стилизации, которые предлагает TextView . Полный список атрибутов см. в TextAppearance .

Некоторые общие атрибуты TextView , не включенные в список, — lineHeight[Multiplier|Extra] , lines , breakStrategy и hyphenationFrequency . TextAppearance работает на уровне символов, а не на уровне абзацев, поэтому атрибуты, влияющие на весь макет, не поддерживаются.

Настройте тему по умолчанию

Когда вы создаете проект с помощью Android Studio, он по умолчанию применяет тему Material Design к вашему приложению, как определено в файле styles.xml вашего проекта. Этот стиль AppTheme расширяет тему из библиотеки поддержки и включает переопределения для атрибутов цвета, которые используются ключевыми элементами пользовательского интерфейса, такими как панель приложения и плавающая кнопка действия , если они используются. Таким образом, вы можете быстро настроить цветовой дизайн вашего приложения, обновив предоставленные цвета.

Например, ваш файл styles.xml выглядит примерно так:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Значения стилей на самом деле являются ссылками на другие цветовые ресурсы , определенные в файле res/values/colors.xml проекта. Это файл, который вы редактируете для изменения цветов. См. Обзор цветов в Material Design, чтобы улучшить пользовательский опыт с помощью динамического цвета и дополнительных пользовательских цветов.

Как только вы узнаете свои цвета, обновите значения в res/values/colors.xml :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--   Color for the app bar and other primary UI elements. -->
    <color name="colorPrimary">#3F51B5</color>

    <!--   A darker variant of the primary color, used for
           the status bar (on Android 5.0+) and contextual app bars. -->
    <color name="colorPrimaryDark">#303F9F</color>

    <!--   a secondary color for controls like checkboxes and text fields. -->
    <color name="colorAccent">#FF4081</color>
</resources>

Затем вы можете переопределить любые другие стили, которые захотите. Например, вы можете изменить цвет фона активности следующим образом:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ...
    <item name="android:windowBackground">@color/activityBackground</item>
</style>

Список атрибутов, которые вы можете использовать в своей теме, см. в таблице атрибутов на R.styleable.Theme . При добавлении стилей для представлений в вашем макете вы также можете найти атрибуты, просмотрев таблицу "XML attribute" в ссылках на класс представления. Например, все представления поддерживают атрибуты XML из базового класса View .

Большинство атрибутов применяются к определенным типам представлений, а некоторые применяются ко всем представлениям. Однако некоторые атрибуты темы, перечисленные в R.styleable.Theme , применяются к окну активности, а не к представлениям в макете. Например, windowBackground изменяет фон окна, а windowEnterTransition определяет анимацию перехода, которая будет использоваться при запуске активности. Для получения более подробной информации см. раздел Запуск активности с использованием анимации .

Библиотека поддержки Android также предоставляет другие атрибуты, которые вы можете использовать для настройки вашей темы, расширенной из Theme.AppCompat , например, атрибут colorPrimary , показанный в предыдущем примере. Их лучше всего просматривать в файле attrs.xml библиотеки .

Также есть различные темы, доступные в библиотеке поддержки, которые вы можете захотеть расширить вместо тех, что показаны в предыдущем примере. Лучшее место для просмотра доступных тем — файл themes.xml библиотеки .

Добавить стили, специфичные для версии

Если новая версия Android добавляет атрибуты темы, которые вы хотите использовать, вы можете добавить их в свою тему, сохраняя совместимость со старыми версиями. Все, что вам нужно, это еще один файл styles.xml , сохраненный в каталоге values , который включает квалификатор версии ресурса :

res/values/styles.xml        # themes for all versions
res/values-v21/styles.xml    # themes for API level 21+ only

Поскольку стили в файле values/styles.xml доступны для всех версий, ваши темы в values-v21/styles.xml могут их наследовать. Это означает, что вы можете избежать дублирования стилей, начав с «базовой» темы, а затем расширив ее в стилях, специфичных для вашей версии.

Например, чтобы объявить переходы окон для Android 5.0 (уровень API 21) и выше, вам нужно использовать новые атрибуты. Таким образом, ваша базовая тема в res/values/styles.xml может выглядеть так:

<resources>
    <!-- Base set of styles that apply to all versions. -->
    <style name="BaseAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryTextColor</item>
        <item name="colorAccent">@color/secondaryColor</item>
    </style>

    <!-- Declare the theme name that's actually applied in the manifest file. -->
    <style name="AppTheme" parent="BaseAppTheme" />
</resources>

Затем добавьте стили, специфичные для версии, в res/values-v21/styles.xml следующим образом:

<resources>
    <!-- extend the base theme to add styles available only with API level 21+ -->
    <style name="AppTheme" parent="BaseAppTheme">
        <item name="android:windowActivityTransitions">true</item>
        <item name="android:windowEnterTransition">@android:transition/slide_right</item>
        <item name="android:windowExitTransition">@android:transition/slide_left</item>
    </style>
</resources>

Теперь вы можете применить AppTheme в своем файле манифеста, и система выберет стили, доступные для каждой версии системы.

Дополнительную информацию об использовании альтернативных ресурсов для разных устройств см. в разделе Предоставление альтернативных ресурсов .

Настройте стили виджетов

Каждый виджет в фреймворке и библиотеке поддержки имеет стиль по умолчанию. Например, когда вы оформляете свое приложение с помощью темы из библиотеки поддержки, экземпляр Button оформляется с помощью стиля Widget.AppCompat.Button . Если вы хотите применить другой стиль виджета к кнопке, вы можете сделать это с помощью атрибута style в вашем файле макета. Например, следующее применяет стиль кнопки без границ библиотеки:

<Button
    style="@style/Widget.AppCompat.Button.Borderless"
    ... />

Если вы хотите применить этот стиль ко всем кнопкам, вы можете объявить его в buttonStyle вашей темы следующим образом:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="buttonStyle">@style/Widget.AppCompat.Button.Borderless</item>
    ...
</style>

Вы также можете расширить стили виджетов, как и любой другой стиль , а затем применить свой собственный стиль виджета в своем макете или теме.

Дополнительные ресурсы

Чтобы узнать больше о темах и стилях, ознакомьтесь со следующими дополнительными ресурсами:

Записи в блоге