Ta strona zawiera szczegółowe informacje o opcjonalnych ulepszeniach widżetów, które są dostępne od Androida 12 (poziom API 31). Te funkcje są opcjonalne, ale łatwe do wdrożenia i poprawiają komfort użytkowników.
Więcej sposobów na ulepszenie widżetu znajdziesz w przewodniku 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.
Kolory dynamiczne 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 Material Components for Android, która jest dostępna od wersji Material Components for Android v1.6.0.
Gdy motyw jest ustawiony w układzie głównym, możesz użyć typowych atrybutów kolorów w układzie głównym lub w dowolnym z jego elementów podrzędnych, aby wybrać 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 tym przykładzie używającym motywu Material 3 kolor motywu urządzenia to „purpurowy”. 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
...
app:tint="?attr/colorPrimaryContainer"
android:src="@drawable/ic_partly_cloudy" />
<!-- Other widget content. -->
</LinearLayout>
Zgodność wsteczna w przypadku kolorów dynamicznych
Kolory dynamiczne są dostępne tylko na urządzeniach z Androidem 12 lub nowszym. Aby zapewnić niestandardowy motyw w starszych wersjach, utwórz motyw domyślny ze spersonalizowanymi kolorami i nowym kwalifikatorem (values-v31) za pomocą atrybutów motywu domyślnego.
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
<resources>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
android:background="?android:attr/colorBackground"
android:theme="@style/MyWidgetTheme" />
</resources>
Włączanie obsługi głosowej
Akcje w aplikacji pozwalają Asystentowi Google wyświetlać widżety w odpowiedzi na odpowiednie polecenia głosowe użytkownika. Konfigurując swój widżet tak, aby reagował na wbudowane intencje (BII), Twoja aplikacja może proaktywnie wyświetlać widżety na powierzchniach Asystenta, takich jak Android i Android Auto. Użytkownicy mogą przypinać widżety wyświetlane przez Asystenta do swojego programu uruchamiającego, co zachęca do dalszego korzystania z nich.
Możesz na przykład skonfigurować widżet podsumowania treningu w aplikacji do ćwiczeń
aby realizować polecenia głosowe użytkownika, które wywołują
GET_EXERCISE_OBSERVATION
BII. Asystent proaktywnie wyświetla Twój widżet, gdy użytkownicy wywołują tę BII, wysyłając prośby takie jak „OK Google, ile kilometrów przebiegłem w tym tygodniu w aplikacji ExampleApp?”
Istnieją dziesiątki BII obejmujących kilka kategorii interakcji z użytkownikiem, dzięki czemu niemal każda aplikacja na Androida może ulepszyć swoje widżety pod kątem obsługi głosowej. Aby rozpocząć, przeczytaj artykuł Integrowanie akcji w aplikacji z widżetami na Androida.
Włączanie płynniejszych 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
android:id="@android:id/background">
</LinearLayout>
Aplikacja może używać @android:id/background w starszych wersjach Androida bez powodowania błędów, ale jest on ignorowany.
Używanie modyfikacji RemoteViews w czasie działania
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ład kodu pokazuje, jak używać kilku z tych metod.
Kotlin
// 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_DP)
Java
// 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_DP);