I widget delle app sono visualizzazioni in miniatura delle app che puoi incorporare in altre app, ad esempio nella schermata Home, e ricevere aggiornamenti periodici. Queste visualizzazioni sono chiamate widget nell'interfaccia utente e puoi pubblicarne uno con un fornitore di widget per app (o fornitore di widget). Un componente dell'app che contiene altri widget è chiamato host di widget dell'app (o host di widget). La figura 1 mostra un widget musicale di esempio:
Questo documento descrive come pubblicare un widget utilizzando un fornitore di widget. Per
informazioni dettagliate sulla creazione del tuo AppWidgetHost per ospitare
i widget delle app, vedi Creare un host di widget.
Per informazioni su come progettare il widget, vedi Panoramica dei widget delle app.
Componenti del widget
Per creare un widget, sono necessari i seguenti componenti di base:
- Oggetto
AppWidgetProviderInfo - Descrive i metadati di un widget, ad esempio il layout, la frequenza di aggiornamento e la classe
AppWidgetProvider.AppWidgetProviderInfoè definito in XML, come descritto in questo documento. AppWidgetProvidercorso- Definisce i metodi di base
che ti consentono di interagire a livello di programmazione con il widget. Tramite questo intent, ricevi trasmissioni quando il widget viene aggiornato, attivato, disattivato o eliminato. Dichiara
AppWidgetProvidernel manifest e poi implementalo, come descritto in questo documento. - Visualizza layout
- Definisce il layout iniziale del widget. Il layout è definito in XML, come descritto in questo documento.
La figura 2 mostra come questi componenti si inseriscono nel flusso complessivo di elaborazione dei widget dell'app.
Se il widget richiede la configurazione dell'utente, implementa l'attività di configurazione del widget dell'app. Questa attività consente agli utenti di modificare le impostazioni dei widget, ad esempio il fuso orario per un widget orologio.
- A partire da Android 12 (livello API 31), puoi fornire una configurazione predefinita e consentire agli utenti di riconfigurare il widget in un secondo momento. Per maggiori dettagli, vedi Utilizzare la configurazione predefinita del widget e Consentire agli utenti di riconfigurare i widget inseriti.
- In Android 11 (livello API 30) o versioni precedenti, questa attività viene avviata ogni volta che l'utente aggiunge il widget alla schermata Home.
Consigliamo anche i seguenti miglioramenti: layout flessibili dei widget, miglioramenti vari, widget avanzati, widget di raccolta e creazione di un host di widget.
Dichiarare il file XML AppWidgetProviderInfo
La definizione delle impostazioni dei metadati (ad esempio dimensioni predefinite delle celle, vincoli di ridimensionamento e frequenze di aggiornamento) è identica sia per le visualizzazioni tradizionali sia per i widget basati su Glance.
Per scoprire come definire e configurare il file XML dei metadati, consulta la sezione Compose-first Declare the AppWidgetProviderInfo XML section nella documentazione di Glance.
Utilizza la classe AppWidgetProvider per gestire le trasmissioni dei widget
I meccanismi del broadcast receiver della piattaforma, i filtri di dichiarazione del manifest e
i cicli di eventi del ciclo di vita sono unificati nella piattaforma. Nello sviluppo
basato su Compose, queste trasmissioni vengono coordinate utilizzando il
wrapper GlanceAppWidgetReceiver.
Per capire come registrare il ricevitore nel manifest e implementare gli override del ciclo di vita compatibili con Hilt, consulta la sezione Utilizzare la classe AppWidgetProvider per gestire le trasmissioni nella documentazione di Glance.
Crea il layout del widget
Devi definire un layout iniziale per il widget in XML e salvarlo nella
directory res/layout/ del progetto. Per maggiori dettagli, consulta le linee guida per la progettazione.
Creare il layout del widget è semplice se hai familiarità con i layout. Tuttavia, tieni presente che i layout dei widget si basano su
RemoteViews, che non supporta tutti i tipi di widget di layout o visualizzazione.
Non puoi utilizzare visualizzazioni personalizzate o sottoclassi delle visualizzazioni supportate da
RemoteViews.
RemoteViews supporta anche ViewStub, che è un View invisibile di dimensioni zero
che puoi utilizzare per gonfiare in modo differito le risorse di layout in fase di runtime.
Supporto per il comportamento stateful
Android 12 aggiunge il supporto del comportamento stateful utilizzando i seguenti componenti esistenti:
Il widget è ancora stateless. L'app deve memorizzare lo stato e registrarsi per gli eventi di modifica dello stato.
Il seguente esempio di codice mostra come implementare questi componenti.
Kotlin
// 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)
)
Java
// 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));
Fornisci due layout: uno destinato ai dispositivi con Android 12 o
versioni successive in res/layout-v31 e l'altro destinato alle versioni precedenti
di Android 11 o precedenti nella cartella res/layout predefinita.
Implementare angoli arrotondati
Il calcolo dei raggi proporzionali interno ed esterno dello sfondo è standard e condiviso. Nello sviluppo basato su Compose, questo valore può essere impostato in modo dinamico in Kotlin insieme alle risorse del tema personalizzato.
Per implementare i raggi degli angoli o configurare stili dinamici per i dispositivi Android meno recenti, consulta la sezione Implementare gli angoli arrotondati di Compose-first nella documentazione di Glance.