Канонические макеты виджетов

Чтобы создать эффективный макет виджета, сначала определите основной контент. Макет определяет, как в виджете будут расположены информация и интерактивные элементы. В Android есть несколько встроенных макетов для панелей инструментов, текста, виджетов списков и сеток, которые упрощают этот процесс.

Текст

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

Только текст

Идеально подходит для заголовков, обновлений статуса, кратких описаний и других случаев, когда достаточно одной строки текста.

Текст и изображение

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

панели инструментов.

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

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

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

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

На панели инструментов размещается логотип приложения, а за ним – кнопки для наиболее часто используемых задач, которые идеально подходят для переключения настроек или ссылок на задачи. При изменении размера окна менее популярные варианты могут быть скрыты, чтобы освободить место для более востребованных действий. Используйте контрольные точки, чтобы добавить новую кнопку размером не менее 48 dp, если для нее есть место.

Списки

Используйте макеты списков, чтобы упорядочить несколько элементов в понятном и удобном для просмотра формате. Это идеально подходит для заголовков новостей, списков дел или сообщений. Организуйте контент в структурированный список, который легко просматривать. Выберите, как будет представлен контент: в контейнере или без него.

Список с текстом и изображениями

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

Контрольный список

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

Список действий

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

Изображение без полей

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

Сетка

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

Только изображение

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

Изображение и текст

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

Образцы кода

В таблице ниже показано, как каждый канонический макет сопоставляется с соответствующей реализацией Jetpack Glance в репозитории GitHub с примерами для платформы Android.

Канонический макет Цифровые отпечатки Руководство
Макет списка действий
  • Обрабатывайте действия с элементами списка с помощью обратных вызовов действий Glance и обеспечьте правильное обновление состояния.
Макет списка
  • Реализуйте переключение состояния флажка с помощью параметров действий или обратных вызовов, чтобы обновлять элементы коллекции.
  • Используйте обратные вызовы действий Glance, например `actionRunCallback`, `ActionCallback(actionParametersOf(...))` или `actionStartActivity(...)`, для параметров `onClick` виджета, чтобы обрабатывать события кликов, например нажатие на флажок.
Выразительный макет панели инструментов
  • Чтобы избежать ошибок импорта `ColorProvider`, импортируйте `androidx.glance.unit.ColorProvider` и используйте `androidx.glance.color.ColorProvider(dayColor, nightColor)`.
  • Для сплошных фоновых цветов используйте непосредственно `GlanceModifier.background(Color)`, а не `ColorProvider`.
Макет сетки изображений
  • Используйте сплошные цвета (`GlanceModifier.background`) или локальные элементы рисования для элементов изображения, если только библиотека загрузки изображений не настроена или не запрошена.
Макет списка с изображениями и текстом
  • Примеры использования: ленты новостей, списки статей, истории тренировок, ленты сообщений и вертикальные списки значков.
  • Сбалансируйте высоту строки списка и обрезку текста при объединении миниатюр с основным/вторичным текстом.
Макет с длинным текстом
  • Если вы умножаете значения `Dp`, например `2 * padding`, импортируйте `androidx.compose.ui.unit.times`.
  • Соблюдайте правила выбора размеров. Убедитесь, что размеры из файла `dimens.xml` используются для отступов и масштабирования шрифтов.
Макет панели инструментов поиска
  • Чтобы избежать ошибок импорта `ColorProvider`, импортируйте `androidx.glance.unit.ColorProvider` и используйте `androidx.glance.color.ColorProvider(dayColor, nightColor)`.
  • Используйте `GlanceModifier.background(Color)` непосредственно для сплошных цветов фона, а не ColorProvider.
Макет изображения без полей / прокрутка с привязкой
  • Установите `verticalScrollMode = VerticalScrollMode.SnapScrollMatchHeight(size.height)` в LazyColumn для Snap Scrolling.
  • Если вы реализуете прокрутку с шагом, вам потребуется Glance 1.3.0-alpha02 или более поздней версии, SDK для компиляции 37 (Baklava) или более поздней версии и плагин Android Gradle (AGP) 9.1.0 или более поздней версии.
  • Задайте `override val sizeMode: SizeMode = SizeMode.Exact` в классе поставщика виджетов.
Стандартная панель инструментов
  • См. раздел Устранение неполадок, чтобы избежать ошибок при импорте `ColorProvider`: используйте `androidx.glance.color.ColorProvider(dayColor, nightColor)`.
  • Для сплошных фоновых цветов используйте непосредственно `GlanceModifier.background(Color)`, а не `ColorProvider`.
Текст с изображением
  • Следуйте правилам адаптивного макета, чтобы текст и изображение располагались рядом или друг под другом в зависимости от доступных размеров виджета.