Widget optimieren

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Hier erfährst du, wie du Widgets mit Compose-ähnlichen APIs erstellst.

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:

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>

Widget im hellen Modus
Abbildung 1. Widget im hellen Design.
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 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
)