Русский
Русский
English
Статистика
Реклама

Темы, стили и атрибуты

В Android существуют стили и темы которые позволяют структурировать разработку пользовательского интерфейса.

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

Пример объявления атрибута из Android SDK:

<attr name="background" format="reference|color" />

Примечание:

Ссылка на другой атрибут через @[package:]type/name структуру тоже является типом.

Темы vs стили

Темы и стили очень похожи, но используются для разных целей.

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

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

Стили и темы предназначены для совместной работы.

Например, у нас есть стиль, в котором фон кнопки - colorPrimary, а цвет текста - colorSecondary. Фактические значения этих цветов приведены в теме.

<?xml version="1.0" encoding="utf-8" ?><resources xmlns:android="http://personeltest.ru/away/schemas.android.com/apk/res/android"><style name="LightTheme" parent="YourAppTheme"><item name="colorPrimary">#FFFFFF</item><item name="colorSecondary">#000000</item></style><style name="DarkTheme" parent="YourAppTheme"><item name="colorPrimary">#000000</item><item name="colorSecondary">#FFFFFF</item></style><style name="Button.Primary" parent="Widget.MaterialComponents.Button"><item name="android:background">?attr/colorPrimary</item><item name="android:textColor">?attr/colorSecondary</item></style></resources>

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

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

Виды ссылок в XML

Атрибут android:background может принимать несколько типов:

android:background="@color/colorPrimary"android:background="?attr/colorPrimary"

В случае с @color/colorPrimary - мы cсылаемся на цветовой ресурс colorPrimary, а точнее на <color name="colorPrimary">#FFFFFF<color> строку, которая прописана в res/values/color.xml файле.

Примечание:

Цвет - это ресурс, на который ссылаются используя значение, указанное в атрибуте name, а не имя XML-файла. Таким образом, можно комбинировать цветовые ресурсы с другими ресурсами в XML-файле под одним элементом <resources>, но я этого не рекомендую.

В свою очередь, ?attr - это ссылка на аттрибут темы.

?attr/colorPrimary указывает на colorPrimary атрибут, который находится в текущей теме:

<?xml version="1.0" encoding="utf-8" ?><resources xmlns:android="http://personeltest.ru/away/schemas.android.com/apk/res/android"><style name="YourAppTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="colorPrimary">@color/colorPrimary</item></style></resources>

Преимущество ?attr ссылок в том, что они будут меняться в зависимости от выбранной темы.

Использование атрибутов темы позволяет создавать меньше стилей, изолируя изменения внутри темы.

Всегда старайтесь ссылаться на цветовые ресурсы через атрибуты темы

Даже, если вы сейчас не поддерживаете несколько тем, то я бы всё равно рекомендовал следовать этому подходу, поскольку он значительно упростит дальнейшую работу с темами и стилями.

Структура ссылок

@[package:]type/name

  1. package - (опционально) название пакета в котором находиться ресурс. По умолчанию - это пакет приложения, в котором находится ресурс.

  2. type - может быть одним из color, string, dimen, layout или какого-либо другого типа ресурса. Более подробно читайте здесь.

  3. name - имя ресурса, используется как идентификатор ресурса.

?[package:]type/name

  1. package - (опционально) название пакета в котором находиться ресурс. По умолчанию - это пакет приложения, в котором находится ресурс.

  2. type - (опционально) всегда attr когда используем ?.

  3. name - имя ресурса, используется как идентификатор ресурса.

? vs ?attr vs ?android:attr

Возможно, вы замечали, что к некоторым атрибутам можно обратиться как ?android:attr/colorPrimary, так и ?attr/colorPrimary, а также ?colorPrimary.

Это связано с тем, что некоторые атрибуты определены в Android SDK, и поэтому нужно указывать приставку android, чтобы ссылаться на них.

Мы можем использовать ? и ?attr в случае, когда эти атрибуты находятся в библиотеках(Например, в AppCompat или MaterialDesign), которые компилируюся в приложение, поэтому пространство имен не требуется.

Некоторые элементы определены и в Android SDK, и в библиотеке, например colorPrimary.

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

Полезные ссылки

Ниже список с интересными статьями о стилях и темах от Google Android разработчиков:

  1. Theming with AppCompat

  2. Android styling: themes vs styles

  3. Whats your texts appearance?

  4. Android Styling: themes overlay

  5. Android Styling: prefer theme attributes

  6. Android styling: common theme attributes

Рекомендую ещё к просмотру видео с Android Dev Summit 2019 года. Ссылка на видео

Источник: habr.com
К списку статей
Опубликовано: 20.02.2021 18:04:03
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Разработка под android

Android development

Android sdk

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru