I widget delle app possono essere configurabili. Ad esempio, un widget orologio può consentire agli utenti di configurare il fuso orario da visualizzare.
Se vuoi consentire agli utenti di configurare le impostazioni del widget, crea una configurazione
del widget Activity
. Questa attività viene
avviata automaticamente dall'host del widget dell'app al momento della creazione del widget
o in un secondo momento, a seconda delle opzioni di configurazione che
specifica.
Dichiarare l'attività di configurazione
Dichiara l'attività di configurazione come attività normale nel file manifest di Android. L'host del widget dell'app lo avvia con l'azione
ACTION_APPWIDGET_CONFIGURE
, quindi l'attività deve accettare questo intent. Ad esempio:
<activity android:name=".ExampleAppWidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
Dichiara l'attività nel file AppWidgetProviderInfo.xml
con l'attributo
android:configure
. Scopri di più sulla
dichiarazione di questo file. Ecco un esempio di
come dichiarare l'attività di configurazione:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
L'attività viene dichiarata con uno spazio dei nomi completo, perché il launcher vi fa riferimento al di fuori dell'ambito del pacchetto.
Questo è tutto ciò che ti serve per avviare un'attività di configurazione. Successivamente, devi implementare l'attività effettiva.
Implementa l'attività di configurazione
Quando implementi l'attività, devi ricordare due punti importanti:
- L'host del widget dell'app chiama l'attività di configurazione e quest'ultima deve sempre restituire un risultato. Il risultato deve includere l'ID
del widget dell'app passato dall'intent che ha avviato l'attività, salvato negli extra dell'intent come
EXTRA_APPWIDGET_ID
. - Il sistema non invia la trasmissione
ACTION_APPWIDGET_UPDATE
quando viene avviata un'attività di configurazione, il che significa che non chiama il metodoonUpdate()
quando viene creato il widget. È responsabilità dell'attività di configurazione richiedere un aggiornamento daAppWidgetManager
quando crei il widget per la prima volta. Tuttavia,onUpdate()
viene chiamato per gli aggiornamenti successivi, ma viene ignorato solo la prima volta.
Consulta gli snippet di codice nella sezione seguente per un esempio di come restituire un risultato dalla configurazione e aggiornare il widget.
Aggiorna il widget dall'attività di configurazione
Quando un widget utilizza un'attività di configurazione, è responsabilità
dell'attività aggiornare il widget al termine della configurazione. Puoi farlo
richiedendo un aggiornamento direttamente dal
AppWidgetManager
.
Ecco un riepilogo della procedura per aggiornare correttamente il widget e chiudere l'attività di configurazione:
Recupera l'ID widget app dall'intent che ha avviato l'attività:
Kotlin
val appWidgetId = intent?.extras?.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID ) ?: AppWidgetManager.INVALID_APPWIDGET_ID
Java
Intent intent = getIntent(); Bundle extras = intent.getExtras(); int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; if (extras != null) { appWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); }
Imposta il risultato dell'attività su
RESULT_CANCELED
.In questo modo, se l'utente esce dall'attività prima di raggiungere la fine, il sistema comunica all'host del widget dell'app che la configurazione è stata annullata e l'host non aggiunge il widget:
Kotlin
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_CANCELED, resultValue)
Java
int resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(Activity.RESULT_CANCELED, resultValue);
Configura il widget in base alle preferenze dell'utente.
Al termine della configurazione, ottieni un'istanza di
AppWidgetManager
chiamandogetInstance(Context)
:Kotlin
val appWidgetManager = AppWidgetManager.getInstance(context)
Java
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
Aggiorna il widget con un layout
RemoteViews
chiamandoupdateAppWidget(int,RemoteViews)
:Kotlin
val views = RemoteViews(context.packageName, R.layout.example_appwidget) appWidgetManager.updateAppWidget(appWidgetId, views)
Java
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget); appWidgetManager.updateAppWidget(appWidgetId, views);
Crea l'intent di ritorno, impostalo con il risultato dell'attività e completa l'attività:
Kotlin
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_OK, resultValue) finish()
Java
Intent resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(RESULT_OK, resultValue); finish();
Per un esempio, consulta la classe di esempio ListWidgetConfigureActivity.kt
su GitHub.
Opzioni di configurazione del widget
Per impostazione predefinita, l'host del widget dell'app avvia l'attività di configurazione una sola volta, subito dopo che l'utente aggiunge il widget alla schermata Home. Tuttavia, puoi specificare opzioni che consentono agli utenti di riconfigurare i widget esistenti o di saltare la configurazione iniziale dei widget fornendo una configurazione predefinita.
Consenti agli utenti di riconfigurare i widget posizionati
Per consentire agli utenti di riconfigurare i widget esistenti, specifica il
flag reconfigurable
nell'attributo
widgetFeatures
di appwidget-provider
. Per ulteriori informazioni, consulta la guida alla dichiarazione del file
AppWidgetProviderInfo.xml
. Ad esempio:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
Gli utenti possono riconfigurare il widget toccandolo e tenendolo premuto, quindi toccando il pulsante Riconfigura, etichettato 1 nella figura 1.

Utilizzare la configurazione predefinita del widget
Puoi offrire un'esperienza più fluida con i widget consentendo agli utenti di saltare il passaggio di configurazione iniziale. Per farlo, specifica sia il flag
configuration_optional
che reconfigurable
nel campo widgetFeatures
. In questo modo si evita
l'avvio dell'attività di configurazione dopo che un utente aggiunge il widget. Come accennato
in precedenza, l'utente può comunque riconfigurare il widget
in un secondo momento. Ad esempio, un widget orologio può ignorare la configurazione iniziale e
mostrare il fuso orario del dispositivo per impostazione predefinita.
Ecco un esempio di come contrassegnare l'attività di configurazione come riconfigurabile e facoltativa:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>