Diese Seite enthält Details zu optionalen Widget-Verbesserungen, die ab Android 12 (API-Level 31) verfügbar sind. Diese Funktionen sind optional, aber einfach zu implementieren und verbessern die Widget-Nutzung für Ihre Nutzer.
Weitere Möglichkeiten, wie Sie Ihr Widget optimieren können, finden Sie im Compose-Leitfaden Widget optimieren.
Dynamische Farben verwenden
Ab Android 12 kann ein Widget die Designfarben des Geräts für Schaltflächen, Hintergründe und andere Komponenten verwenden. Das sorgt für flüssigere Übergänge und Konsistenz zwischen verschiedenen Widgets.
Es gibt zwei Möglichkeiten, dynamische Farben zu erzielen:
Verwenden Sie das Standarddesign des Systems (
@android:style/Theme.DeviceDefault.DayNight) im Stammlayout.Verwenden Sie das Material 3-Design (
Theme.Material3.DynamicColors.DayNight) aus der Bibliothek Material Components for Android, die ab Material Components for Android Version 1.6.0 verfügbar ist.
Sobald das Design im Stammlayout festgelegt ist, können Sie gängige Farbattribute im Stamm oder in einem seiner untergeordneten Elemente verwenden, um die dynamischen Farben zu übernehmen.
Hier einige Beispiele für Farbattribute, die Sie verwenden können:
?attr/primary?attr/primaryContainer?attr/onPrimary?attr/onPrimaryContainer
Im folgenden Beispiel mit dem Material 3-Design ist die Designfarbe des Geräts „violett“. Die Akzentfarbe und der Widget-Hintergrund passen sich an den hellen und den dunklen Modus an, wie in Abbildung 1 und 2 dargestellt.
<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>
Abwärtskompatibilität für dynamische Farben
Dynamische Farben sind nur auf Geräten mit Android 12 oder höher verfügbar. Wenn du ein benutzerdefiniertes Design für niedrigere Versionen bereitstellen möchtest, erstelle ein Standarddesign mit deinen benutzerdefinierten Farben und einen neuen Qualifizierer (values-v31) mit den Standarddesignattributen.
Hier ein Beispiel mit dem Material 3-Design:
/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" />
Sprachunterstützung aktivieren
Mit App Actions kann Google Assistant Widgets als Antwort auf relevante Sprachbefehle von Nutzern anzeigen. Wenn Sie Ihr Widget so konfigurieren, dass es auf integrierte Intents (BIIs) reagiert, kann Ihre App proaktiv Widgets auf Assistant-Oberflächen wie Android und Android Auto anzeigen. Nutzer können vom Assistant angezeigte Widgets an ihren Launcher anpinnen, was die zukünftige Interaktion fördert.
Sie können beispielsweise das Widget für die Trainingszusammenfassung für Ihre Trainings-App so konfigurieren, dass die Sprachbefehle des Nutzers erfüllt werden, die den BII GET_EXERCISE_OBSERVATION auslösen. Assistant zeigt dein Widget proaktiv an, wenn Nutzer diesen BII durch Anfragen wie „Hey Google, wie viele Kilometer bin ich diese Woche mit Beispiel-App gelaufen?“ auslösen.
Es gibt Dutzende von BIIs, die mehrere Kategorien von Nutzerinteraktionen abdecken. So können in fast jeder Android-App Widgets für die Sprachsteuerung optimiert werden. Informationen zum Einstieg finden Sie unter App Actions in Android-Widgets einbinden.
Flüssigere Übergänge ermöglichen
Ab Android 12 bieten Launcher einen flüssigeren Übergang, wenn ein Nutzer deine App über ein Widget startet.
Wenn du diesen verbesserten Übergang aktivieren möchtest, verwende @android:id/background oder android.R.id.background, um dein Hintergrundelement zu identifizieren:
<!-- 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>
Ihre App kann @android:id/background in früheren Android-Versionen verwenden, ohne dass es zu Fehlern kommt. Die Berechtigung wird jedoch ignoriert.
Laufzeitänderung von RemoteViews verwenden
Ab Android 12 können Sie mehrere RemoteViews-Methoden nutzen, mit denen Sie RemoteViews-Attribute zur Laufzeit ändern können. Eine vollständige Liste der hinzugefügten Methoden finden Sie in der API-Referenz zu RemoteViews.
Das folgende Codebeispiel zeigt, wie einige dieser Methoden verwendet werden.
// 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 )