Diese Seite enthält Details zu optionalen Widget-Verbesserungen, die verfügbar sind ab Android 12 (API-Level 31) verfügbar. Diese Funktionen sind optional, die Implementierung und Verbesserung der Widget verwenden.
Dynamische Farben verwenden
Ab Android 12 kann ein Widget die Farben des Gerätedesigns verwenden für Schaltflächen, Hintergründe und andere Komponenten. Dies ermöglicht eine reibungslose und Einheitlichkeit in verschiedenen Widgets.
Es gibt zwei Möglichkeiten, dynamische Farben zu erhalten:
Standarddesign des Systems verwenden (
@android:style/Theme.DeviceDefault.DayNight
) im Stammlayout.Das Design "Material 3" (
Theme.Material3.DynamicColors.DayNight
) aus dem Materialkomponenten für Android-Geräte Bibliothek, verfügbar ab Material Components for Android Version 1.6.0.
Sobald das Design im Stammlayout festgelegt ist, können Sie gängige Farbattribute in der Stamm oder eines seiner untergeordneten Elemente, um die dynamischen Farben aufzunehmen.
Hier einige Beispiele für Farbattribute, die Sie verwenden können:
?attr/primary
?attr/primaryContainer
?attr/onPrimary
?attr/onPrimaryContainer
Im folgenden Beispiel, in dem das Material 3-Design verwendet wird, ist die Designfarbe des Geräts „Lila.“ Die Akzentfarbe und der Widget-Hintergrund passen sich an Hell und Dunkel an wie in den Abbildungen 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
...
app:tint="?attr/colorPrimaryContainer"
android:src="@drawable/ic_partly_cloudy" />
<!-- Other widget content. -->
</LinearLayout>
<ph type="x-smartling-placeholder">
<ph type="x-smartling-placeholder">
Abwärtskompatibilität für dynamische Farben
Dynamische Farben sind nur auf Geräten mit Android 12 verfügbar
oder höher. Wenn Sie ein benutzerdefiniertes Design für niedrigere Versionen bereitstellen möchten, müssen Sie ein Standarddesign erstellen
mit Ihren benutzerdefinierten Farben und einem neuen Kennzeichner (values-v31
) mit der Standardfarbe
Theme-Attribute festlegen.
Hier ist ein Beispiel für das Thema 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>
Sprachunterstützung aktivieren
Mit App Actions kann Google Assistant Widgets als Reaktion auf relevante Sprachbefehle des Nutzers anzeigen. Wenn Sie Ihr um auf integrierte Intents (BIIs) zu reagieren, App kann proaktiv Widgets auf Assistant-Oberflächen wie Android und Android Auto Nutzer haben die Möglichkeit, anpinnen Widgets, die Assistant ihren Launcher-Funktion zu nutzen und zukünftige Interaktionen zu fördern.
Du kannst beispielsweise das Widget mit der Trainingszusammenfassung für deine Trainings-App konfigurieren.
um die Sprachbefehle des Nutzers auszuführen,
GET_EXERCISE_OBSERVATION
BII. Assistant zeigt dein Widget proaktiv an, wenn Nutzer diesen BII auslösen, indem sie
Fragen stellen wie: „Hey Google, wie viele Kilometer bin ich diese Woche
Beispiel-App?“
Es gibt Dutzende von BIIs, die mehrere Kategorien der Nutzerinteraktion abdecken, sodass nahezu alle Android-Apps ihre sprachbasierten Widgets optimieren können. Um loszulegen, Siehe App Actions in Android-Widgets einbinden.
Die Widget-Auswahl deiner App verbessern
Mit Android 12 können Sie die Widget-Auswahl für Ihr indem Sie dynamische Widget-Vorschauen und Widget-Beschreibungen hinzufügen.
Skalierbare Widget-Vorschauen zur Widget-Auswahl hinzufügen
Ab Android 12 wird die Widget-Vorschau im ist skalierbar. Sie stellen sie als XML-Layout bereit, das mit der Standardgröße. Bisher war die Widget-Vorschau eine statische Drawable-Ressource, die zu einer falschen Auswahl von Widgets führen, werden sie dem Startbildschirm hinzugefügt.
Verwenden Sie zum Implementieren skalierbarer Widget-Vorschauen die Methode
previewLayout
des appwidget-provider
-Elements, um stattdessen ein XML-Layout bereitzustellen:
<appwidget-provider
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
Wir empfehlen, dasselbe Layout wie das eigentliche Widget zu verwenden, aber mit realistischen Standardeinstellungen.
oder Testwerte. Die meisten Apps verwenden dieselben previewLayout
und initialLayout
. Für
zum Erstellen genauer Vorschaulayouts finden Sie im folgenden Abschnitt dieses
Seite.
Wir empfehlen, die Attribute previewLayout
und previewImage
anzugeben.
damit deine App previewImage
verwenden kann, wenn das Gerät des Nutzers
unterstützt previewLayout
nicht. Das Attribut previewLayout
hat Vorrang
über dem Attribut previewImage
.
Empfohlene Ansätze zum Erstellen genauer Vorschauen
Wenn du skalierbare Widget-Vorschauen implementieren möchtest, verwende das previewLayout
-Attribut des
appwidget-provider
-Element zum Bereitstellen eines XML-Layouts:
<appwidget-provider
...
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
<ph type="x-smartling-placeholder">
Wenn Sie eine genaue Vorschau sehen möchten, können Sie direkt das Widget mit Standardwerten verknüpfen, indem Sie die folgenden Schritte ausführen:
android:text="@string/my_widget_item_fake_1"
wird fürTextView
festgelegt Elemente.Festlegen eines Standard- oder Platzhalterbilds oder -symbols, z. B.
android:src="@drawable/my_widget_icon"
fürImageView
-Komponenten.
Ohne Standardwerte werden in der Vorschau möglicherweise falsche oder leere Werte angezeigt. Eine Ein wichtiger Vorteil dieses Ansatzes ist, dass Sie eine lokalisierte Vorschau Inhalte.
Empfohlene Ansätze für komplexere Vorschauen mit ListView
:
GridView
oder StackView
erhalten Sie unter Genaue Vorschauen erstellen, die dynamische
Artikel.
Abwärtskompatibilität mit skalierbaren Widget-Vorschauen
Wenn Sie möchten, dass die Widget-Auswahl unter Android 11 (API-Level 30) oder niedriger eine Vorschau Ihrer
das Widget previewImage
.
Wenn Sie das Aussehen des Widgets ändern, aktualisieren Sie das Vorschaubild.
Beschreibung für das Widget hinzufügen
Ab Android 12 eine Beschreibung für das Widget angeben Auswahl, die für das Widget angezeigt werden soll.
<ph type="x-smartling-placeholder">Geben Sie mithilfe des Attributs description
des Elements eine Beschreibung für Ihr Widget an.
<appwidget-provider>
-Element:
<appwidget-provider
android:description="@string/my_widget_description">
</appwidget-provider>
Sie können die
descriptionRes
in früheren Android-Versionen verwenden, aber vom Widget ignoriert wird.
Auswahl.
Reibungslosere Übergänge ermöglichen
Ab Android 12 bieten Launcher einen reibungsloseren Übergang Ein Nutzer startet deine App über ein Widget.
Um diese verbesserte Umstellung zu ermöglichen, verwenden Sie @android:id/background
oder
android.R.id.background
, um dein Hintergrundelement zu identifizieren:
// Top-level layout of the widget.
<LinearLayout
android:id="@android:id/background">
</LinearLayout>
Deine App kann @android:id/background
auf früheren Android-Versionen verwenden
ohne zu brechen, aber es wird ignoriert.
Laufzeitänderung von RemoteViews verwenden
Ab Android 12 können Sie verschiedene
RemoteViews
-Methoden, die eine Laufzeitänderung von RemoteViews
ermöglichen
Attribute. Weitere Informationen finden Sie in der RemoteViews
API.
für die vollständige Liste der hinzugefügten Methoden.
Das folgende Codebeispiel zeigt, wie einige dieser Methoden verwendet werden.
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);