Widget optimieren

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:

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> Widget im hellen Modus-Design
Abbildung 1: Widget im hellen Design.
<ph type="x-smartling-placeholder">
</ph> Widgets im dunklen Modus
Abbildung 2: Widget im dunklen Design.

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">
</ph> Ein Bild, das eine Widget-Vorschau zeigt
. Abbildung 3: Eine Widget-Vorschau, die standardmäßig wird in einem 3x3-Bereich angezeigt, kann jedoch aufgrund seines XML-Layouts in einen 3x1-Bereich passen.

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ür TextView festgelegt Elemente.

  • Festlegen eines Standard- oder Platzhalterbilds oder -symbols, z. B. android:src="@drawable/my_widget_icon" für ImageView-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">
</ph> Ein Bild, das eine Widget-Auswahl mit einem Widget und seiner Beschreibung zeigt <ph type="x-smartling-placeholder">
</ph> Abbildung 4: Beispiel-Widget-Auswahl mit einem Widget und die Beschreibung.

Geben Sie mithilfe des Attributs description des Elements eine Beschreibung für Ihr Widget an. &lt;appwidget-provider&gt;-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);