Ulepsz swój widżet

Wypróbuj Compose
Jetpack Compose to zalecany zestaw narzędzi do tworzenia interfejsu na Androida. Dowiedz się, jak tworzyć widżety za pomocą interfejsów API w stylu Compose.

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>

Widżet w trybie jasnym
Rysunek 1. Widżet w trybie jasnym.
Widżety w trybie ciemnym
Rysunek 2. Widżet w ciemnym motywie.

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
)