Прямые ссылки на публичные уроки для быстрого старта и стабильной индексации lesson-страниц.
В этом уроке разберём, как создавать собственные кастомные стили для объединения атрибутов ради удобной поддержки и расширяемости кода. Также рассмотрим, как переопределять атрибуты стандартных тем для корректной работы на различных устройствах, и кастомизируем тему приложения.
Рассмотрим текстовый элемент варианта ответа. Для текста прописан набор атрибутов: размер, цвет и семейство шрифтов. Такой набор придётся дублировать для каждого TextView на всех экранах. При необходимости массово изменить, например, размер шрифта — возникнут проблемы.
Цель кастомных стилей — вынести повторяющийся набор атрибутов в одно место и ссылаться на ограниченный набор стилей. Это упрощает массовые изменения, ускоряет разработку новых макетов и снижает риск ошибок.
Официальная документация рекомендует создать файл styles.xml в папке values через контекстное меню. Внутри обязательного тега resources добавляем новый тег style.
Тег style требует минимум один атрибут — name с произвольным названием. Атрибуты задаются через вложенные теги item:
name — имя параметра из разметки;Захардкоженный цвет лучше вынести в colors.xml, создав новый цвет с осмысленным именем (например, textVariantsColor), и указать на него ссылку в стиле.
Если стиль задаёт только часть атрибутов, остальные берутся из компонента по умолчанию. Документация рекомендует явно указывать родительский стиль через атрибут parent.
Рекомендуется наследовать стили от библиотеки поддержки Android — они совместимы и оптимизированы для различных устройств. Признак принадлежности к библиотеке поддержки — наличие AppCompat в названии. Для текста родительским стилем служит TextAppearance.AppCompat.
Существует два вида наследования:
parent, в name прописывается только название стиля.name, атрибут parent не используется.При наличии многих экранов и чёткого гайдлайна удобно создавать иерархию стилей:
Например, для базового стиля BaseText дочерние стили при неявном наследовании будут называться BaseText.Header1, BaseText.Header2 и т.д.
После создания стиля в файле разметки достаточно добавить атрибут style со ссылкой на него и удалить дублирующие атрибуты.
Файл themes.xml содержит тему приложения. По умолчанию используется Theme.Material3.DayNight.NoActionBar. Разберём составные части названия:
В закомментированном примере показано переопределение цветов темы. Помимо цветов можно переопределять шрифты, элементы интерфейса, анимации — в зависимости от задач.
Базовый стиль темы содержит общие для всех экранов атрибуты. Заготовка Theme.EnglishWordsApp предназначена для модификации базового стиля для конкретных частей или экранов приложения — у неё также могут быть дочерние переопределённые темы.
Для перекраски статус-бара добавляем в тему два item:
<item name="android:statusBarColor">@color/white</item> <item name="android:windowLightStatusBar">true</item>
windowLightStatusBar="true" обеспечивает тёмные значки на светлом фоне. При поддержке тёмной темы аналогичные изменения нужно внести в themes.xml из каталога values-night, указав соответствующий цвет фона.