[Разработка под Android] Темы, стили и атрибуты
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В 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 разработчиков:
- Theming with AppCompat
- Android styling: themes vs styles
- What’s your text’s appearance?
- Android Styling: themes overlay
- Android Styling: prefer theme attributes
- Android styling: common theme attributes
Рекомендую ещё к просмотру видео с Android Dev Summit 2019 года. Ссылка на видео
===========
Источник:
habr.com
===========
Похожие новости:
- [Программирование, Разработка под Android, GitHub, Социальные сети и сообщества] Российский разработчик написал клиент Clubhouse для Android после реверс-инжиниринга API
- [Разработка мобильных приложений, Разработка под Android, Смартфоны] Пользователи начали жаловаться на проблемы с камерами Pixel
- [Программирование, Разработка под Android, Kotlin] Как писать и переиспользовать код на «чистом» Kotlin. Заметки Android-разработчика
- [Разработка под iOS, Разработка под Android, Монетизация мобильных приложений, Законодательство в IT, Игры и игровые приставки] Epic Games попыталась ограничить работу магазинов приложений в Северной Дакоте
- [Разработка мобильных приложений, Разработка игр, Разработка под Android, Unity, Прототипирование] Опыт разработки первой мобильной игры на Unity или как полностью перевернуть свою жизнь
- [Разработка под Android] Новости Android разработки 15.02.2021
- [Разработка мобильных приложений, Проектирование и рефакторинг, Разработка под Android, Kotlin] Разработка на Android: как найти подходящую абстракцию для работы со строками (перевод)
- [PHP, Разработка под Android, Google API] SafetyNet Attestation — описание и реализация проверки на PHP
- [Разработка под Android] Обновление Android Jetpack: Activity Result API и рефакторинг Fragment
- [Программирование, Разработка мобильных приложений, Разработка под Android, Kotlin] Как заблокировать приложение с помощью runBlocking
Теги для поиска: #_razrabotka_pod_android (Разработка под Android), #_android_development, #_android_sdk, #_razrabotka_pod_android (
Разработка под Android
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:05
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В 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> android:background="@color/colorPrimary"
android:background="?attr/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> Всегда старайтесь ссылаться на цветовые ресурсы через атрибуты темы
=========== Источник: habr.com =========== Похожие новости:
Разработка под Android ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:05
Часовой пояс: UTC + 5