Улучшения виджетов в Android 12

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

Альтернативный текст

Убедитесь, что виджет совместим с Android 12

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

В этом случае виджет может отображаться некорректно в следующих условиях:

  • В углах виджета есть контент. В этом случае он может быть обрезан.

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

Если это изменение затронет ваш виджет, рекомендуем обновить его, добавив скругленные углы (как описано в следующем разделе), чтобы обеспечить правильное отображение.

Как использовать пример

Чтобы посмотреть, как работают эти API, ознакомьтесь с примером виджета со списком.

Как реализовать скругленные углы

В Android 12 появились системные параметры system_app_widget_background_radius и system_app_widget_inner_radius, которые позволяют задавать радиус скругления углов виджета.

Виджет погоды в Токио
Рисунок 1. Закругленные углы виджета и его представления.

1 Угол виджета.

2 Угол представления внутри виджета.

Подробнее о реализации скругленных углов…

Добавьте темы устройства

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

Подробнее о том, как добавить темы для устройств…

Виджет в светлой теме
Рисунок 2. Виджет в светлой теме
Виджеты в тёмной теме
Рисунок 3. Виджет в тёмной теме

Упростить настройку виджетов

Если вы укажете действие конфигурации с атрибутом configure в appwidget-provider, хост виджета приложения запустит это действие сразу после того, как пользователь добавит виджет на главный экран.

В Android 12 добавлены новые возможности, которые позволяют улучшить процесс настройки для пользователей. Подробнее о том, как разрешить пользователям настраивать виджеты…

Добавить новые составные кнопки

В Android 12 добавлена поддержка сохранения состояния с помощью следующих существующих компонентов:

Виджет по-прежнему не имеет состояния. Приложение должно сохранять состояние и регистрироваться для событий изменения состояния.

Рисунок 4. Пример виджета с флажками

Подробнее о поддержке поведения с сохранением состояния…

Используйте улучшенные API для размеров и макетов виджетов

Начиная с Android 12 вы можете использовать более точные атрибуты размера и более гибкие макеты, указывая дополнительные ограничения размера виджетов и предоставляя адаптивные и точные макеты.

Подробную информацию можно найти в разделе Гибкие макеты виджетов.

Как улучшить виджеты в приложении

В Android 12 вы можете улучшить работу с виджетами в приложении, добавив динамический предпросмотр и описания. Подробнее о том, как добавить масштабируемый предпросмотр виджета в меню выбора виджетов и как добавить описание виджета…

Включить плавные переходы

Начиная с Android 12, лаунчеры обеспечивают более плавный переход, когда пользователь запускает приложение из виджета. Подробнее о том, как включить плавные переходы…

Использовать упрощенные коллекции RemoteViews

В Android 12 добавлен метод setRemoteAdapter(int viewId, RemoteViews.RemoteCollectionItems items), который позволяет приложению передавать коллекцию напрямую при заполнении ListView. Ранее при использовании ListView нужно было реализовать и объявить RemoteViewsService, чтобы возвращать RemoteViewsFactory.

Подробнее о том, как использовать коллекции RemoteViews…

Использовать изменение RemoteViews во время выполнения

В Android 12 добавлено несколько методов RemoteViews, которые позволяют изменять атрибуты RemoteViews во время выполнения. Полный список добавленных методов приведен в документации по API RemoteViews.

Подробнее об изменении во время выполненияRemoteViews…