Le sezioni seguenti descrivono come creare un semplice widget per app con Glance.
Dichiara AppWidget
nel manifest
Dopo aver completato i passaggi di configurazione, dichiara AppWidget
e i relativi metadati nella tua app.
Estendi il ricevitore
AppWidget
daGlanceAppWidgetReceiver
:class MyAppWidgetReceiver : GlanceAppWidgetReceiver() { override val glanceAppWidget: GlanceAppWidget = TODO("Create GlanceAppWidget") }
Registra il provider del widget dell'app nel file
AndroidManifest.xml
e nel file di metadati associato:<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>
Aggiungi i metadati AppWidgetProviderInfo
A questo punto, segui la guida Creare un widget semplice per creare e definire le informazioni del widget dell'app nel file @xml/my_app_widget_info
.
L'unica differenza per Riepilogo è che non esiste un file XML initialLayout
, ma devi definirne uno. Puoi utilizzare il layout di caricamento predefinito fornito nella biblioteca:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/glance_default_loading_layout">
</appwidget-provider>
Definisci GlanceAppWidget
Crea una nuova classe che espanda
GlanceAppWidget
e sostituisca il metodoprovideGlance
. Questo è il metodo che ti consente di caricare i dati necessari per visualizzare il widget: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") } } }
Istantialo in
glanceAppWidget
sul tuoGlanceAppWidgetReceiver
:class MyAppWidgetReceiver : GlanceAppWidgetReceiver() { // Let MyAppWidgetReceiver know which GlanceAppWidget to use override val glanceAppWidget: GlanceAppWidget = MyAppWidget() }
Ora hai configurato un AppWidget
utilizzando Riepilogo.
Creare l'interfaccia utente
Lo snippet seguente mostra come creare l'interfaccia utente:
/* 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 MyContent() } } @Composable private fun MyContent() { Column( modifier = GlanceModifier.fillMaxSize(), 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>() ) } } } }
Il codice di esempio precedente esegue le seguenti operazioni:
- Nel livello superiore
Column
, gli elementi vengono posizionati verticalmente uno dopo l'altro. - Il
Column
aumenta le dimensioni in base allo spazio disponibile (tramiteGlanceModifier
), allinea i contenuti in alto (verticalAlignment
) e li centra orizzontalmente (horizontalAlignment
). - Il contenuto di
Column
viene definito utilizzando la funzione lambda. L'ordine è importante.- Il primo elemento in
Column
è un componenteText
con12.dp
di margine. - Il secondo elemento è un
Row
, in cui gli elementi sono disposti orizzontalmente uno accanto all'altro, con dueButtons
centrati orizzontalmente (horizontalAlignment
). La visualizzazione finale dipende dallo spazio disponibile. L'immagine seguente è un esempio di come potrebbe apparire:
- Il primo elemento in

Puoi modificare i valori di allineamento o applicare valori di modifica diversi (ad esempio il padding) per modificare il posizionamento e le dimensioni dei componenti. Consulta la documentazione di riferimento per un elenco completo di componenti, parametri e modificatori disponibili per ogni classe.