In den folgenden Abschnitten wird beschrieben, wie Sie mit Glance ein einfaches App-Widget erstellen.
AppWidget
im Manifest deklarieren
Nachdem Sie die Einrichtungsschritte abgeschlossen haben, deklarieren Sie die AppWidget
und die zugehörigen
Metadaten in deiner App.
- Anbieter des App-Widgets in der Datei
AndroidManifest.xml
registrieren und der zugehörigen Metadatendatei:
<receiver android:name=".glance.MyReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/my_app_widget_info" />
</receiver>
- Verlängere den
AppWidget
-Empfänger vonGlanceAppWidgetReceiver
aus:
class MyAppWidgetReceiver : GlanceAppWidgetReceiver() { override val glanceAppWidget: GlanceAppWidget = TODO("Create GlanceAppWidget") }
AppWidgetProviderInfo
-Metadaten hinzufügen
Führen Sie als Nächstes diesen Schritt aus, um die AppWidgetProviderInfo
-Metadaten hinzuzufügen:
Folgen Sie der Anleitung unter Einfaches Widget erstellen, um die App zu erstellen und zu definieren. Widget-Informationen in der Datei
@xml/my_app_widget_info
.Der einzige Unterschied für Glance ist, dass es keine
initialLayout
-XML-Datei gibt, müssen Sie eine definieren. Sie können das vordefinierte Ladelayout verwenden, das in Bibliothek:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/glance_default_loading_layout">
</appwidget-provider>
GlanceAppWidget
definieren
Erstellen Sie eine neue Klasse, die aus
GlanceAppWidget
erweitert wird und dieprovideGlance
-Methode. Mit dieser Methode können Sie Daten laden, die zum Rendern des Widgets erforderlich sind:
class MyAppWidget : GlanceAppWidget() { override suspend fun provideGlance(context: Context, id: GlanceId) { // In this method, load data needed to render the AppWidget. // Use `withContext` to switch to another thread for long running // operations. provideContent { // create your AppWidget here Text("Hello World") } } }
- Instanziieren Sie sie im
glanceAppWidget
auf IhremGlanceAppWidgetReceiver
:
class MyAppWidgetReceiver : GlanceAppWidgetReceiver() { // Let MyAppWidgetReceiver know which GlanceAppWidget to use override val glanceAppWidget: GlanceAppWidget = MyAppWidget() }
Sie haben jetzt eine AppWidget
mit der Funktion „Live-Anzeige“ konfiguriert.
UI erstellen
Das folgende Snippet veranschaulicht, wie die UI erstellt wird:
/* Import Glance Composables In the event there is a name clash with the Compose classes of the same name, you may rename the imports per https://kotlinlang.org/docs/packages.html#imports using the `as` keyword. import androidx.glance.Button import androidx.glance.layout.Column import androidx.glance.layout.Row import androidx.glance.text.Text */ class MyAppWidget : GlanceAppWidget() { override suspend fun provideGlance(context: Context, id: GlanceId) { // Load data needed to render the AppWidget. // Use `withContext` to switch to another thread for long running // operations. provideContent { // create your AppWidget here GlanceTheme { MyContent() } } } @Composable private fun MyContent() { Column( modifier = GlanceModifier.fillMaxSize() .background(GlanceTheme.colors.background), verticalAlignment = Alignment.Top, horizontalAlignment = Alignment.CenterHorizontally ) { Text(text = "Where to?", modifier = GlanceModifier.padding(12.dp)) Row(horizontalAlignment = Alignment.CenterHorizontally) { Button( text = "Home", onClick = actionStartActivity<MyActivity>() ) Button( text = "Work", onClick = actionStartActivity<MyActivity>() ) } } } }
Im vorherigen Codebeispiel wird Folgendes ausgeführt:
- Auf der obersten Ebene
Column
werden die Elemente vertikal nach jedem Element platziert Sonstiges. - Die Größe von
Column
wird an den verfügbaren Platz angepasst (über dieGlanceModifier
und richtet den Inhalt oben aus (verticalAlignment
) und zentriert sie horizontal (horizontalAlignment
). - Der Inhalt von
Column
wird mithilfe der Lambda-Funktion definiert. Die Reihenfolge ist entscheidend.- Das erste Element im
Column
ist eineText
-Komponente mit12.dp
von Abstand. - Das zweite Element ist ein
Row
, bei dem Elemente horizontal nebeneinander, wobei zweiButtons
horizontal zentriert sind (horizontalAlignment
) Die endgültige Anzeige hängt vom verfügbaren Platz ab. Die folgende Abbildung zeigt ein Beispiel, wie das aussehen könnte:
- Das erste Element im
Sie können die Ausrichtungswerte ändern oder verschiedene Modifikatorwerte (z. B. Padding), um die Platzierung und Größe der Komponenten zu ändern. Siehe Referenz Dokumentation finden Sie eine vollständige Liste der Komponenten, Parameter und verfügbaren Modifikatoren für jede Klasse.