[Разработка под Android] Темы, стили и атрибуты

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
20-Фев-2021 19:31

В 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://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://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
  • package - (опционально) название пакета в котором находиться ресурс. По умолчанию - это пакет приложения, в котором находится ресурс.
  • type - может быть одним из color, string, dimen, layout или какого-либо другого типа ресурса. Более подробно читайте здесь.
  • name - имя ресурса, используется как идентификатор ресурса.
?[package:]type/name
  • package - (опционально) название пакета в котором находиться ресурс. По умолчанию - это пакет приложения, в котором находится ресурс.
  • type - (опционально) всегда attr когда используем ?.
  • name - имя ресурса, используется как идентификатор ресурса.
? vs ?attr vs ?android:attrВозможно, вы замечали, что к некоторым атрибутам можно обратиться как ?android:attr/colorPrimary, так и ?attr/colorPrimary, а также ?colorPrimary.Это связано с тем, что некоторые атрибуты определены в Android SDK, и поэтому нужно указывать приставку android, чтобы ссылаться на них.Мы можем использовать ? и ?attr в случае, когда эти атрибуты находятся в библиотеках(Например, в AppCompat или MaterialDesign), которые компилируюся в приложение, поэтому пространство имен не требуется.Некоторые элементы определены и в Android SDK, и в библиотеке, например colorPrimary.В таких случаях лучше использовать версию из библиотеки, поскольку она имеет поддержку на всех уровнях API.Полезные ссылкиНиже список с интересными статьями о стилях и темах от Google Android разработчиков: Рекомендую ещё к просмотру видео с Android Dev Summit 2019 года. Ссылка на видео
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_razrabotka_pod_android (Разработка под Android), #_android_development, #_android_sdk, #_razrabotka_pod_android (
Разработка под Android
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 09:51
Часовой пояс: UTC + 5