App-Widgets sind Miniaturansichten von Apps, die Sie in andere Apps einbetten können, z. B. auf dem Startbildschirm, und die regelmäßig aktualisiert werden. Diese Ansichten werden auf der Benutzeroberfläche als Widgets bezeichnet. Sie können sie mit einem App-Widget-Anbieter (oder Widget-Anbieter) veröffentlichen. Eine App-Komponente, die andere Widgets enthält, wird als App-Widget-Host (oder Widget-Host) bezeichnet. Abbildung 1 zeigt ein Beispiel für ein Musik-Widget:
In diesem Dokument wird beschrieben, wie Sie ein Widget mit einem Widget-Anbieter veröffentlichen. Weitere
Informationen zum Erstellen eines eigenen AppWidgetHost zum Hosten
von App-Widgets finden Sie unter Widget-Host erstellen.
Informationen zum Design Ihres Widgets finden Sie unter Übersicht über App-Widgets.
Widget-Komponenten
Zum Erstellen eines Widgets benötigen Sie die folgenden grundlegenden Komponenten:
AppWidgetProviderInfo-Objekt- Beschreibt die Metadaten für ein Widget, z. B. das Layout, die Updatehäufigkeit und die
AppWidgetProvider-Klasse des Widgets.AppWidgetProviderInfowird in XML definiert, wie in diesem Dokument beschrieben. AppWidgetProvider-Klasse- Definiert die grundlegenden Methoden, mit denen Sie programmatisch mit dem Widget interagieren können. Darüber erhalten Sie Broadcasts, wenn das Widget aktualisiert, aktiviert, deaktiviert oder gelöscht wird. Sie deklarieren
AppWidgetProviderim Manifest und implementieren es dann , wie in diesem Dokument beschrieben. - Layout ansehen
- Definiert das anfängliche Layout für das Widget. Das Layout wird in XML definiert, wie in diesem Dokument beschrieben.
Abbildung 2 zeigt, wie diese Komponenten in den gesamten Verarbeitungsablauf für App-Widgets passen.
Wenn Ihr Widget eine Nutzerkonfiguration erfordert, implementieren Sie die Konfigurationsaktivität für App-Widgets. Mit dieser Aktivität können Nutzer Widget-Einstellungen ändern, z. B. die Zeitzone für ein Uhr-Widget.
- Ab Android 12 (API-Level 31) können Sie eine Standardkonfiguration bereitstellen und Nutzern erlauben, das Widget später neu zu konfigurieren. Weitere Informationen finden Sie unter Use the widget's default configuration und Enable users to reconfigure placed widgets.
- Unter Android 11 (API-Level 30) oder niedriger wird diese Aktivität jedes Mal gestartet, wenn der Nutzer das Widget seinem Startbildschirm hinzufügt.
Wir empfehlen außerdem die folgenden Verbesserungen: flexible Widget-Layouts, verschiedene Verbesserungen, erweiterte Widgets, Sammlungs Widgets und Widget-Host erstellen.
AppWidgetProviderInfo-XML deklarieren
Das Definieren der Metadateneinstellungen (z. B. Standardzellengrößen, Größenänderungsbeschränkungen und Aktualisierungshäufigkeiten) ist sowohl bei herkömmlichen Ansichten als auch bei Glance-basierten Widgets identisch.
Informationen zum Definieren und Konfigurieren der XML-Datei mit Metadaten finden Sie im Abschnitt Compose-first AppWidgetProviderInfo-XML deklarieren in der Glance Dokumentation.
Mit der AppWidgetProvider-Klasse Widget-Broadcasts verarbeiten
Die Broadcast-Receiver-Mechanismen der Plattform, die Manifestdeklarationsfilter und die Ereignisschleifen des Lebenszyklus sind unter der Plattform vereinheitlicht. Bei der Compose-first-Entwicklung werden diese Broadcasts mit dem Wrapper GlanceAppWidgetReceiver orchestriert.
Informationen zum Registrieren des Receivers im Manifest und zum Implementieren von Hilt-kompatiblen Lebenszyklusüberschreibungen finden Sie im Abschnitt Compose-first: Mit der AppWidgetProvider-Klasse Broadcasts verarbeiten in der Glance Dokumentation.
Widget-Layout erstellen
Sie müssen ein anfängliches Layout für Ihr Widget in XML definieren und im Verzeichnis res/layout/ des Projekts speichern. Weitere Informationen finden Sie in den Designrichtlinien.
Das Erstellen des Widget-Layouts ist einfach, wenn Sie mit
Layouts vertraut sind. Widget-Layouts basieren jedoch auf
RemoteViews, das nicht jede Art von Layout oder Widget unterstützt.
Sie können keine benutzerdefinierten Ansichten oder Unterklassen der Ansichten verwenden, die von RemoteViews unterstützt werden.
RemoteViews unterstützt auch ViewStub, eine unsichtbare
View mit der Größe 0, mit der Sie Layoutressourcen zur Laufzeit verzögert aufblasen können.
Unterstützung für zustandsorientiertes Verhalten
Android 12 bietet Unterstützung für zustandsorientiertes Verhalten mit den folgenden vorhandenen Komponenten:
Das Widget ist weiterhin zustandslos. Ihre App muss den Zustand speichern und sich für Ereignisse bei Zustandsänderungen registrieren.
Das folgende Codebeispiel zeigt, wie Sie diese Komponenten implementieren.
// Check the view. remoteView.setCompoundButtonChecked(R.id.my_checkbox, true) // Check a radio group. remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2) // Listen for check changes. The intent has an extra with the key // EXTRA_CHECKED that specifies the current checked state of the view. remoteView.setOnCheckedChangeResponse( R.id.my_checkbox, RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent) )
Stellen Sie zwei Layouts bereit: eines für Geräte mit Android 12 oder
höher in res/layout-v31 und das andere für frühere
Android 11 oder niedriger im Standardordner res/layout.
Abgerundete Ecken implementieren
Die Berechnung des äußeren Hintergrunds und der inneren proportionalen Radien ist standardmäßig und wird gemeinsam verwendet. Bei der Compose-first-Entwicklung kann dies in Kotlin zusammen mit benutzerdefinierten Designressourcen dynamisch festgelegt werden.
Informationen zum Implementieren von Eckradien oder zum Einrichten dynamischer Stile für ältere Android-Geräte finden Sie im Abschnitt Compose-first: Abgerundete Ecken implementieren in der Glance-Dokumentation.