Ta strona zawiera szczegółowe informacje o opcjonalnych ulepszeniach widżetów, które są dostępne od Androida 12 (poziom interfejsu API 31). Te funkcje są opcjonalne, ale są łatwe do wdrożenia i poprawiają wrażenia użytkowników związane z widżetem.
Więcej informacji o ulepszaniu widżetu znajdziesz w przewodniku po Compose Ulepszanie widżetu.
Używanie kolorów dynamicznych
Od Androida 12 widżet może używać kolorów motywu urządzenia w przypadku przycisków, tła i innych komponentów. Zapewnia to płynniejsze przejścia i spójność między różnymi widżetami.
Dynamiczne kolory można uzyskać na 2 sposoby:
Użyj domyślnego motywu systemu (
@android:style/Theme.DeviceDefault.DayNight) w układzie głównym.Użyj motywu Material 3 (
Theme.Material3.DynamicColors.DayNight) z biblioteki Komponenty Material Design na Androida, która jest dostępna od wersji 1.6.0.
Po ustawieniu motywu w układzie głównym możesz używać wspólnych atrybutów kolorów w układzie głównym lub w dowolnym z jego elementów podrzędnych, aby wybierać kolory dynamiczne.
Oto kilka przykładów atrybutów kolorów, których możesz użyć:
?attr/primary?attr/primaryContainer?attr/onPrimary?attr/onPrimaryContainer
W poniższym przykładzie z motywem Material 3 kolor motywu urządzenia to „fioletowy”. Kolor uzupełniający i tło widżetu dostosowują się do trybów jasnego i ciemnego, jak pokazano na rysunkach 1 i 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>
Zgodność wsteczna kolorów dynamicznych
Kolory dynamiczne są dostępne tylko na urządzeniach z Androidem 12 lub nowszym. Aby udostępnić niestandardowy motyw dla niższych wersji, utwórz domyślny motyw ze spersonalizowanymi kolorami i nowym kwalifikatorem (values-v31) przy użyciu domyślnych atrybutów motywu.
Oto przykład użycia motywu 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" />
Włączanie obsługi głosowej
Akcje w aplikacjach umożliwiają Asystentowi Google wyświetlanie widżetów w odpowiedzi na odpowiednie polecenia głosowe użytkownika. Jeśli skonfigurujesz widżet tak, aby reagował na intencje wbudowane, aplikacja będzie mogła proaktywnie wyświetlać widżety na platformach Asystenta, takich jak Android i Android Auto. Użytkownicy mogą przypinać widżety wyświetlane przez Asystenta do programu uruchamiającego, co zachęca do dalszego korzystania z aplikacji.
Możesz na przykład skonfigurować widżet podsumowania treningu w aplikacji do ćwiczeń, aby realizować polecenia głosowe użytkownika, które aktywują intencję wbudowaną GET_EXERCISE_OBSERVATION. Asystent proaktywnie wyświetla widżet, gdy użytkownicy aktywują tę intencję, wypowiadając prośby takie jak: „OK Google, ile mil przebiegłem w tym tygodniu w PrzykładowejAplikacji?”.
Dostępne są dziesiątki wbudowanych intencji obejmujących kilka kategorii interakcji użytkownika, dzięki czemu niemal każda aplikacja na Androida może ulepszyć swoje widżety pod kątem obsługi głosowej. Aby zacząć, zapoznaj się z artykułem Integracja akcji w aplikacji z widżetami Androida.
Zwiększ płynność przejść
Od Androida 12 programy uruchamiające zapewniają płynniejsze przejście, gdy użytkownik uruchamia aplikację z widżetu.
Aby włączyć to ulepszone przejście, użyj @android:id/background lub android.R.id.background, aby zidentyfikować element tła:
<!-- 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>
Aplikacja może używać uprawnienia @android:id/background w starszych wersjach Androida bez powodowania błędów, ale jest ono ignorowane.
Używanie modyfikacji RemoteViews w czasie działania
Począwszy od Androida 12, możesz korzystać z kilku metod RemoteViews, które umożliwiają modyfikowanie atrybutów RemoteViews w czasie działania. Pełną listę dodanych metod znajdziesz w dokumentacji interfejsu API RemoteViews.
Poniższy przykładowy kod pokazuje, jak używać niektórych z tych metod.
// 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 )