На этой странице рассказывается о дополнительных улучшениях виджетов, доступных в Android 12 (уровень API 31) и более поздних версиях. Эти функции необязательны, но их легко реализовать, и они повышают удобство использования виджетов.
Другие способы улучшить виджет описаны в руководстве по Compose Enhance your Widget.
Как использовать динамические цвета
В Android 12 и более поздних версиях ОС виджет может использовать цвета темы устройства для кнопок, фона и других компонентов. Это обеспечивает более плавные переходы и единообразие между разными виджетами.
Динамические цвета можно реализовать двумя способами:
Использовать тему по умолчанию (
@android:style/Theme.DeviceDefault.DayNight) в корневой разметке.Используйте тему Material 3 (
Theme.Material3.DynamicColors.DayNight) из библиотеки Material Components for Android, доступной начиная с версии 1.6.0.
После того как тема задана в корневом макете, вы можете использовать общие атрибуты цвета в корневом или любом из его дочерних элементов, чтобы выбрать динамические цвета.
Вот несколько примеров атрибутов цвета:
?attr/primary?attr/primaryContainer?attr/onPrimary?attr/onPrimaryContainer
В следующем примере используется тема Material 3, а цвет темы устройства – фиолетовый. Цвет акцента и фон виджета адаптируются к светлой и темной темам, как показано на рисунках 1 и 2.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/colorPrimaryContainer" android:theme="@style/Theme.Material3.DynamicColors.DayNight"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:tint="?attr/colorPrimaryContainer" android:src="@drawable/ic_cloud" /> <!-- Other widget content. --> </LinearLayout>
Обратная совместимость для динамических цветов
Динамические цвета доступны только на устройствах с Android 12 или более поздней версии. Чтобы задать специальную тему для более ранних версий, создайте тему по умолчанию с пользовательскими цветами и новым квалификатором (values-v31), используя атрибуты темы по умолчанию.
Вот пример с темой Material 3:
/values/styles.xml
<resources> <style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight"> <!-- Override default colorBackground attribute with custom color. --> <item name="android:colorBackground">@color/my_background_color</item> <!-- Add other colors/attributes. --> </style> </resources>
/values-v31/styles.xml
<resources> <!-- Do not override any color attribute. --> <style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight" /> </resources>
/layout/my_widget_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="?android:attr/colorBackground" android:theme="@style/MyWidgetTheme" />
Как включить поддержку голосового управления
Действия в приложении позволяют Google Ассистенту показывать виджеты в ответ на голосовые команды пользователей. Если настроить виджет так, чтобы он реагировал на встроенные намерения, приложение сможет показывать виджеты на платформах Ассистента, например Android и Android Auto. Пользователи могут закреплять виджеты, которые показывает Ассистент, на главном экране, чтобы чаще взаимодействовать с ними.
Например, вы можете настроить виджет со сводкой тренировки для своего приложения для фитнеса, чтобы он выполнял голосовые команды, которые активируют GET_EXERCISE_OBSERVATION. Ассистент будет показывать виджет, когда пользователи будут активировать это намерение, например с помощью запроса Окей, Google, сколько километров я пробежал на этой неделе в приложении"Пример приложения"?
Существуют десятки встроенных намерений, охватывающих несколько категорий взаимодействия с пользователем. Благодаря этому практически любое приложение для Android может улучшить свои виджеты для голосового управления. Чтобы начать работу, ознакомьтесь с инструкциями по интеграции действий в приложении с виджетами Android.
Как включить плавные переходы
Начиная с Android 12, панели запуска обеспечивают более плавный переход при запуске приложения из виджета.
Чтобы включить улучшенный переход, используйте @android:id/background или android.R.id.background для идентификации фонового элемента:
<!-- Top-level layout of the widget. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/background" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> </LinearLayout>
В более ранних версиях Android приложение может использовать разрешение @android:id/background без ошибок, но оно будет игнорироваться.
Как изменять RemoteViews во время выполнения
В Android 12 и более поздних версий можно использовать несколько методов RemoteViews, которые позволяют изменять атрибуты RemoteViews во время выполнения. Полный список добавленных методов приведен в справочной документации по API
RemoteViews.
В приведенном ниже примере кода показано, как использовать некоторые из этих методов.
// Set the colors of a progress bar at runtime. remoteView.setColorStateList( R.id.progress, "setProgressTintList", createProgressColorStateList() ) // Specify exact sizes for margins. remoteView.setViewLayoutMargin( R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DIP )