Progettazione dell'interfaccia utente Android creazione di schermate delle preferenze dell'applicazione

Molte applicazioni possono beneficiare delle preferenze condivise - la risposta della piattaforma Android alla memorizzazione persistente delle impostazioni dell'applicazione. Esistono molti modi per creare interfacce utente per la raccolta e la visualizzazione di impostazioni permanenti per gli utenti. Il modo più semplice è utilizzare PreferencesActivity, che fornisce un aspetto coerente con il resto della piattaforma, incluse le preferenze di sistema del dispositivo. Scopri come usare PreferencesActivity in questo tutorial.

La nostra semplice applicazione per il lettore di feed tutorial Mobiletuts, che non ha ancora un nome ufficiale (ci siamo riferiti ad esso come TutList), ha bisogno di un migliore controllo dell'utente sul processo di aggiornamento in background. Pertanto, aggiungeremo una singola preferenza per aiutare a controllare l'aggiornamento in background.

Questo tutorial si basa su tutorial precedenti, tra cui Android Essentials: Preferenze dell'applicazione e le serie continue sulla nostra attività TutList con il tutorial più recente, Fondamenti di Android: Pianificazione di attività ricorrenti. Se hai problemi a tenere il passo, sentiti libero di postare domande nella sezione commenti - molte persone leggono e rispondono, incluso noi stessi. Inoltre, non dimenticare il riferimento all'SDK di Android.
Il codice di esempio finale che accompagna questo tutorial è disponibile per il download come open-source dall'hosting del codice Google.

Passaggio 0: Introduzione

Questo tutorial presume che inizierai dove è stato interrotto il tutorial precedente della serie, Concetti fondamentali di Android: Pianificazione di attività ricorrenti. Puoi scaricare quel codice e lavorare da lì oppure puoi scaricare il codice per questo tutorial e seguirlo. In ogni caso, preparatevi scaricando uno o l'altro progetto e importandolo in Eclipse.

Passaggio 1: aggiunta di un helper delle preferenze condivise

Le preferenze condivise sono spesso utilizzate in tutta l'applicazione. Le definizioni dei nomi delle singole impostazioni e il nome del gruppo di preferenze devono essere memorizzate per l'uso in tutta l'applicazione. Ci sono diversi modi per risolvere questo problema. La soluzione che utilizzeremo include una classe helper per un accesso coerente a specifici valori delle impostazioni, con le chiavi delle preferenze memorizzate come stringhe di risorse per l'accesso dal codice e da altri file di risorse.

Iniziamo con il codice della classe helper:

 public class TutListSharedPrefs public final static String PREFS_NAME = "tutlist_prefs"; public static boolean getBackgroundUpdateFlag (Contesto contesto) SharedPreferences prefs = context.getSharedPreferences (PREFS_NAME, 0); return prefs.getBoolean (context.getString (R.string.pref_key_flag_background_update), false);  public static void setBackgroundUpdateFlag (Contesto contesto, booleano newValue) SharedPreferences prefs = context.getSharedPreferences (PREFS_NAME, 0); Editor prefsEditor = prefs.edit (); prefsEditor.putBoolean (context.getString (R.string.pref_key_flag_background_update), newValue); prefsEditor.commit (); 

In questa classe, abbiamo definito una costante pubblica per identificare il nome del gruppo o dell'insieme di preferenze, chiamato PREFS_NAME. Abbiamo anche usato una stringa di risorse, chiamata pref_key_flag_background_update, per specificare la definizione del nome della preferenza specifica. È necessario aggiungere una stringa alle risorse in modo che questo identificatore sia definito. Impostiamo il suo valore su "background_update_flag" ma ciò che importa è che il valore utilizzato è lo stesso ovunque.

Sebbene abbiamo aggiunto un metodo setBackgroundUpdateFlag () per la completezza, non useremo questo metodo. Continua a leggere per vedere perché.

Infine, abbiamo aggiunto questa classe Java al pacchetto com.mamlambo.tutorial.tutlist.data in quanto ciò sembra più rilevante.

Passaggio 2: aggiunta di un'attività della schermata delle preferenze

L'SDK di Android include un metodo coerente per presentare le impostazioni agli utenti: PreferenceActivity. Insieme a un file di risorse di preferenza, questa classe di attività specializzata rende molto semplice per gli sviluppatori configurare e visualizzare la maggior parte dei tipi di impostazioni dell'applicazione in modo coerente. La coerenza con le altre schermate delle preferenze dell'applicazione e del sistema rende anche questi schermi familiari e facili anche per gli utenti.

Per aggiungere un PreferenceActivity a? TutList? applicazione, inizia aggiungendo una nuova attività chiamata TutListPreferencesActivity e fai estendere PreferenceActivity (l'abbiamo aggiunta al pacchetto principale). Poiché non utilizziamo il nome di preferenza predefinito, dobbiamo impostare il nome di preferenza che verrà utilizzato da PreferenceActivity. Inoltre, dobbiamo dirgli quale file di risorse preferenza usare. Questo gli dirà come visualizzare le preferenze, così come quali questa schermata visualizza e modifica.

All'interno del metodo onCreate () di questa attività, utilizzare il metodo setSharedPreferencesName () con la costante del gruppo di preferenze definita nella classe helper delle preferenze definita nel passaggio precedente. Quindi effettua una chiamata al metodo addPreferencesFromResource (). Definiremo questa risorsa nel prossimo passaggio.

In questo momento, l'intera classe ha questo aspetto:

 public class TutListPreferencesActivity estende PreferenceActivity @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); getPreferenceManager (). setSharedPreferencesName (TutListSharedPrefs.PREFS_NAME); addPreferencesFromResource (R.xml.prefs); 

Miglioreremo questa lezione durante il tutorial. Ma prima, creiamo la risorsa XML di riferimento chiamata prefs.

Passaggio 3: definizione di una risorsa schermata di preferenze

Aggiungi un nuovo file XML chiamato prefs.xml alle risorse dell'applicazione. Puoi utilizzare il nuovo wizard di file XML Android e compilare i campi come mostrato nell'immagine seguente. Questo creerà anche il file XML nella posizione corretta, la directory / res / xml.

Un file di risorse per le attività delle preferenze è costituito da a tag con uno o più tag per l'organizzazione delle impostazioni e vari attributi specifici del tipo. Per le nostre esigenze di preferenza semplice, possiamo usare il , che carica e memorizza un valore booleano. Altri tipi possibili includono le selezioni EditTextPreference e ListPreference, per la raccolta di stringhe e una scelta tra un elenco di elementi, rispettivamente.

Ecco l'intero file di risorse della schermata delle preferenze dei contenuti, prefs.xml:

      

Ciò dimostra uno dei migliori motivi per archiviare le stringhe chiave come una risorsa: possono essere utilizzate direttamente nel file XML e caricate in Java.

Passaggio 4: avvio della schermata delle preferenze

Successivamente, aggiungeremo una voce di menu sul frammento di elenco per avviare la schermata delle preferenze. Durante questa operazione, aggiorneremo anche la voce di menu di aggiornamento per non avviare più l'aggiornamento pianificato.

Per fare ciò, prima modifica il file di risorse /res/menu/options_menu.xml per aggiungere una nuova voce di menu:

 

Dovrai anche aggiungere la stringa di risorse corrispondente per il titolo dell'oggetto (@ string / settings) e aggiungere un'icona appropriata (@ drawable / ic_menu_preferences). Abbiamo utilizzato l'icona delle preferenze standard da Android SDK, che sarà familiare agli utenti.

Quindi, modifica il metodo onCreateOptionsMenu () per fornire l'Intento corretto per la nuova voce di menu:

 Intent prefsIntent = new Intent (getActivity (). GetApplicationContext (), TutListPreferencesActivity.class); MenuItem preferences = menu.findItem (R.id.settings_option_item); preferences.setIntent (prefsIntent);

Ora aggiorna il metodo onOptionsItemSelected (). Poiché esiste più di una voce di menu, ora ha senso utilizzare un'istruzione switch. All'interno dell'istruzione switch, possiamo utilizzare gli identificatori costanti assegnati per ciascuna voce di menu per differenziare le selezioni dell'utente.

 @Override public boolean onOptionsItemSelected (MenuItem item) switch (item.getItemId ()) case R.id.refresh_option_item: getActivity (). StartService (item.getIntent ()); rompere; caso R.id.settings_option_item: getActivity (). startActivity (item.getIntent ()); rompere;  return true; 

Infine, non dimenticare di aggiungere la nuova attività al file manifest Android:

 

Ora puoi eseguire l'applicazione e vedere la nuova voce di menu.

L'attività delle preferenze può essere avviata e memorizzare e recuperare la preferenza di aggiornamento in background. Dovrebbe apparire come il seguente:

Sembra fantastico, ma non fa nulla di reale ancora. Sebbene il flag sia aggiornato all'interno delle preferenze, non esiste ancora un luogo in cui il valore sia controllato per vedere se l'aggiornamento in background debba iniziare o meno?

Passaggio 5: avvio e arresto dell'allarme

Nell'ultimo passaggio, le chiamate al metodo helper setRecurringAlarm () sono state rimosse. In realtà, questo metodo non sarà più necessario nella classe TutListFragment. Invece, spostalo nella classe TutListPreferencesActivity. Quindi aggiungi un secondo helper, chiamato cancelRecurringAlarm ():

 private void cancelRecurringAlarm (Contesto contesto) Intent downloader = new Intent (context, AlarmReceiver.class); PendingIntent recurringDownload = PendingIntent.getBroadcast (contesto, 0, downloader, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager alarms = (AlarmManager) getSystemService (Context.ALARM_SERVICE); alarms.cancel (recurringDownload); 

Infine, sovrascrivere il metodo onPause () della classe TutListPreferencesActivity per impostare o annullare l'allarme ricorrente come appropriato. All'interno di questo metodo, puoi controllare il valore delle preferenze - valori aggiornati usando il metodo helper getBackgroundUpdateFlag () e chiamare il metodo appropriato:

 @Override protected void onPause () super.onPause (); Contesto contesto = getApplicationContext (); if (TutListSharedPrefs.getBackgroundUpdateFlag (getApplicationContext ())) setRecurringAlarm (context);  else cancelRecurringAlarm (context); 

Ora, ogni volta che le impostazioni sono selezionate, l'allarme viene aggiornato in base al valore corrente. Con un valore predefinito di? Off?, L'utente deve accedere alle impostazioni per abilitare il download in background.

Informazioni su PreferenceFragment

Potresti esserti chiesto perché non abbiamo usato la nuova classe PreferenceFragment. Il motivo è semplice: non è ancora supportato nella libreria di compatibilità. Dal momento che vogliamo mantenere l'applicazione TutList compatibile con più dispositivi Android 3.0, non possiamo ancora utilizzarla. Speriamo che la libreria di compatibilità continui ad essere migliorata.

Conclusione

In questo tutorial, hai appreso come utilizzare il file di risorse PreferencesScreen con PreferencesActivity per creare rapidamente e facilmente un'attività funzionale per la gestione dei dati delle preferenze dell'applicazione. Inoltre, hai fornito all'utente un metodo per controllare l'aggiornamento in background dell'applicazione TutList.
Come sempre, non vediamo l'ora di ricevere il tuo feedback.

Riguardo agli Autori

Gli sviluppatori mobili Lauren Darcey e Shane Conder hanno coautore diversi libri sullo sviluppo di Android: un libro di programmazione approfondito intitolato Sviluppo di applicazioni wireless Android e Sams ti insegna a sviluppare applicazioni Android in 24 ore. Quando non scrivono, passano il loro tempo a sviluppare software mobile presso la loro azienda ea fornire servizi di consulenza. Possono essere contattati via email a [email protected], tramite il loro blog su androidbook.blogspot.com e su Twitter @androidwireless.

Hai bisogno di più aiuto nella scrittura di app per Android? Consulta i nostri ultimi libri e risorse!

я я