Il team di progettazione dei materiali di Google fornisce una definizione chiara delle impostazioni della tua app Android:
Le impostazioni dell'app consentono agli utenti di indicare le preferenze su come dovrebbe comportarsi un'app.
Google afferma inoltre che i tuoi utenti dovrebbero navigare nelle impostazioni dell'app sia dalla barra di navigazione laterale che dal menu della barra degli strumenti, con una voce etichettata impostazioni.
L'inclusione delle impostazioni nella tua app consente agli utenti di controllare alcune delle funzionalità della tua app. Ciò rende i tuoi utenti felici invece che arrabbiati, perché ora hanno il controllo di come si comporta l'applicazione.
Si consiglia vivamente di concedere l'accesso alle impostazioni dell'app. Ciò fornirà un'esperienza utente migliore per i tuoi utenti, il che porterà a una migliore recensione sul Google Play Store, che alla fine darà luogo a un numero maggiore di download di app (che aumentano le entrate).
Presumo che tu debba aver interagito con le impostazioni di un'app sul tuo dispositivo, ad esempio selezionando una suoneria predefinita o controllando la tua privacy sull'app. Quasi tutte le app più popolari che hai scaricato o scaricabili nel Google Play Store includono una schermata delle impostazioni che ti consente di controllare il comportamento dell'applicazione.
Un esempio di un'app popolare con una schermata delle impostazioni è l'app Chrome per Android di Google. Nella schermata delle impostazioni di questa app, gli utenti possono scegliere il motore di ricerca predefinito, modificare il comportamento delle notifiche, controllare la privacy degli utenti, ecc. Puoi vederlo tu stesso scaricando l'app Chrome dal Google Play Store (se non lo hai già su il tuo dispositivo). Il seguente screenshot proviene dall'app Chrome, visualizzando la schermata delle impostazioni dell'app.
In questo post imparerai come creare una schermata delle impostazioni dell'app da zero e anche come leggere i valori che l'utente ha selezionato dalle impostazioni dell'app. Per un ulteriore bonus, imparerai anche come utilizzare la funzione di modelli Android Studio per avviare rapidamente il tuo progetto con una schermata delle impostazioni.
Un esempio di progetto (in Kotlin) per questo tutorial può essere trovato sul nostro repository GitHub in modo da poter seguire facilmente.
Per poter seguire questo tutorial, avrai bisogno di:
SharedPreferences
)Avvia Android Studio e crea un nuovo progetto (puoi chiamarlo SettingsScreenDemo
) con un'attività vuota chiamata SettingsActivity
. Assicurati di controllare anche il Include il supporto Kotlin casella di controllo.
PreferenceFragment
Per supportare API di livello 11 (Honeycomb) e versioni successive, possiamo utilizzare PreferenceFragment
. Questa classe è semplicemente a Frammento
che mostra una gerarchia di Preferenza
oggetti come liste.
import android.os.Bundle import android.preference.PreferenceFragment import android.support.v7.app.AppCompatActivity class SettingsActivity: AppCompatActivity () override fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) if (fragmentManager.findFragmentById (android.R.id.content) == null) fragmentManager.beginTransaction () .add (android.R.id.content, SettingsFragment ()). commit () class SettingsFragment: PreferenceFragment () override fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) addPreferencesFromResource (R.xml.preferences)
Nel codice sopra, abbiamo creato una classe nidificata SettingsFragment
dentro SettingsActivity
(perché il SetttingsFragment
la classe è così piccola). Si noti che la nostra classe SettingsFragment
estende il PreferenceFragment
superclasse e ha un metodo addPrerenceFromResource
dentro onCreate ()
. In questo metodo, gli abbiamo dato un ID risorsa R.xml.preference
della preferenza XML da lanciare - quando il Frammento
è caricato Infine, ospitiamo il frammento sull'attività semplicemente usando il FragmentTransaction
per aggiungerlo all'interfaccia utente interna onCreate ()
di SettingsActivity
.
Crea un file XML e nominalo preferences.xml. Salva questo file all'interno del res / xml directory nel tuo progetto di app. Nota che puoi dare a questo file qualsiasi nome, ma è altamente raccomandato attenersi al nome convenzionale "preferenze". Inoltre, in genere si dovrebbe avere solo un file di questo tipo in un progetto di app.
Il nodo root per il nostro preferenze.xml il file dovrebbe essere a
elemento. All'interno di questo elemento radice, ora abbiamo il nostro individuo Preferenza
. Ecco gli attributi comuni associati a a Preferenza
:
Android: chiave
: questo attributo è usato per ottenere il valore nel SharedPreferences
oggetto.Android: titolo
: imposta il titolo per Preferenza
. Questo è il testo in grassetto.Android: sintesi
: imposta il riepilogo per il Preferenza
(questo non è richiesto). Questo è il testo sbiadito sotto il titolo.Android: defaultValue
: imposta il valore predefinito per Preferenza
. Passeremo attraverso ciascuno di essi Preferenza
abbiamo definito sopra a breve Si noti che è anche possibile aggiungere o personalizzare un Preferenza
tramite l'editor delle preferenze di Android Studio, simile all'editor delle risorse di layout con cui hai già familiarità. Puoi scegliere di aggiungere / modificare il tuo file XML preferito direttamente in modalità "Testo" o utilizzare l'interfaccia utente drag-and-drop in modalità "Progettazione".
Come puoi vedere, in questo editor puoi trascinare e rilasciare qualsiasi Preferenza
nella sezione palette (sul lato sinistro). Una volta eliminato, dovresti selezionarlo e modificarne gli attributi nel riquadro degli attributi (sul lato destro) dell'editor. Si noti che per impostazione predefinita, vengono assegnati alcuni attributi da modificare. Per visualizzare o modificare tutti gli attributi associati a un selezionato Preferenza
, assicurati di aver cliccato su Visualizza tutti gli attributi link nella parte inferiore del riquadro degli attributi. Questo è molto simile all'editor di layout che già conosci.
Ora, passiamo attraverso ciascuno dei Preferenza
entità che abbiamo.
UN CheckBoxPreference
è semplicemente un CheckBox
widget incluso nella schermata delle preferenze. Questo Preferenza
restituisce il valore "true" se selezionato o "false" in caso contrario. In altre parole, restituisce un valore booleano a seconda dello stato del widget.
Altri attributi che puoi aggiungere a CheckBoxPreference
siamo:
Android: summaryOff
: imposta il riepilogo per il Preferenza
in una schermata delle preferenze quando è deselezionata.Android: summaryOn
: imposta il riepilogo per il Preferenza
in una schermata di preferenza quando è selezionata.Android: disableDependentsState
: Lo stato (true per on o false per off) che provoca la disattivazione delle persone dipendenti. Può essere un valore booleano, come "true" o "false".SwitchPreference
esegue funzionalità simili a CheckBoxPreference
. Fornisce un'opzione selezionabile a due stati ("on" o "off"). Questo utilizza a Interruttore
widget che consente all'utente di scorrere verso sinistra ("off") e verso destra ("on"). Questo Preferenza
include anche gli attributi descritti per CheckBoxPreference
sopra. Inoltre, ha i seguenti attributi:
Android: switchTextOff
: imposta il testo utilizzato sullo switch stesso quando è nello stato "off". Android: switchTextOn
: imposta il testo utilizzato sull'interruttore stesso quando è nello stato "on". Questo Preferenza
, quando si fa clic, mostra una finestra di dialogo per l'utente per inserire un testo di input. Usa il Modifica il testo
widget, compresi tutti gli attributi di quel widget con cui hai già familiarità.
Si noti che il valore memorizzato nel file SharedPreferences
è una stringa.
Questo tipo di Preferenza
visualizzerà un elenco di voci in una finestra di dialogo quando viene toccato. Qui puoi specificare una coppia di risorse di array di stringhe nel tuo XML di preferenza. Questa risorsa array di stringhe contiene semplicemente una raccolta di stringhe. Questa risorsa si trova a res / valori / arrays.xml
.
- 15 minuti
- 30 minuti
- 1 ora
- 3 ore
- 6 ore
- Mai
- 15
- 30
- 60
- 180
- 360
- -1
Ecco il nostro esempio ListPreference
usando questa risorsa.
Impostiamo le voci e i valori di entrata usando il Android: le voci
e Android: entryValues
attributi rispettivamente.
Android: le voci
: la matrice leggibile dall'uomo da presentare come elenco.Android: entryValues
: la matrice per trovare il valore da salvare per una preferenza quando viene selezionata una voce dalle voci.Ad esempio, se utilizziamo il numero di minuti in ciascuna durata come valori di voce, quando l'utente sceglie una durata (ad esempio 30 minuti), il valore intero corrispondente verrà memorizzato in SharedPreferences
(ad esempio 30).
Questo è simile a ListPreference
ma invece di avere pulsanti radio, abbiamo le caselle di controllo. In altre parole, l'utente può selezionare più elementi nella finestra di dialogo. Si noti che il risultato è memorizzato in un "set di stringhe" nel SharedPreferences
. Questo può essere recuperato usando getStringSet ()
.
Quando un RingtonePreference
viene toccato, viene visualizzata una finestra di dialogo contenente l'elenco delle suonerie disponibili sul dispositivo o sull'emulatore.
Android: showDefault
: se il Suoneria standard l'opzione verrà mostrata.Android: showSilent
: se a Silenzioso l'opzione verrà mostrata nell'elenco. L'utente può selezionare questa opzione se non desidera riprodurre alcuna suoneria. Si noti che il valore memorizzato nel file SharedPreferences
per questa preferenza è una stringa speciale. Questa stringa speciale è un URI che punta a a Fornitore di contenuti
.
Diventa un problema quando hai una lunga lista di preferenze o impostazioni, perché gli utenti potrebbero avere qualche problema nella scansione o nella comprensione. Per risolvere questo problema, possiamo raggruppare le nostre preferenze. Dai uno sguardo allo screenshot dell'app di Chrome che ti ho mostrato di nuovo all'inizio: noti che raggruppava le preferenze in due categorie: Nozioni di base e Avanzate. Questo rende più facile per l'utente comprendere le preferenze e non rendere l'elenco troppo schiacciante.
Vediamo ora quanto è semplice eseguire questo compito.
... ...
Semplicemente circondiamo le preferenze che vogliamo raggruppare in a
tagga e dai a ciascun gruppo un titolo usando il Android: titolo
attributo.
Nota che è possibile aprire un'attività semplicemente facendo clic su una voce di preferenza dalla schermata delle impostazioni. Questo può tornare utile quando vuoi aprire una pagina web. Ecco il codice per farlo:
Qui, abbiamo aggiunto un
elemento all'interno del
elemento.
Android: Azione
: imposta l'azione per l'Intent (è simile alla chiamata setAction ()
su un oggetto Intent). Android: targetClass
: imposta la parte della classe del nome del componente (come per la chiamata setComponent ()
su un oggetto Intent).Android: targetPackage
: Imposta la parte del pacchetto del nome del componente.Android: i dati
: Imposta i dati da assegnare (come per la chiamata setData ()
su un oggetto Intent). Ad esempio, per aprire una pagina Web è possibile utilizzare quanto segue:
Vediamo ora come aggiornare il sommario delle preferenze con il valore selezionato dall'utente.
class SettingsActivity: AppCompatActivity () // ... class SettingsFragment: PreferenceFragment () override fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) addPreferencesFromResource (R.xml.preferences) bindPreferenceSummaryToValue (findPreference ("ringtone")) bindPreferenceSummaryToValue (findPreference ("text")) bindPreferenceSummaryToValue (findPreference ("elenco")) // ...
In questa classe, abbiamo creato un metodo di supporto chiamato bindPreferenceSummaryToValue ()
, che si trova all'interno del nostro oggetto compagno, per aggiornare il testo di riepilogo delle preferenze con il valore che l'utente ha selezionato. L'abbiamo superato a Preferenza
oggetto come argomento. Il findPreference ()
restituirà a Preferenza
usando il Preferenza
La chiave di s.
class SettingsActivity: AppCompatActivity () // ... oggetto companion / ** * Un listener di modifica del valore di preferenza che aggiorna il riepilogo della preferenza * per riflettere il suo nuovo valore. * / private val sBindPreferenceSummaryToValueListener = Preference.OnPreferenceChangeListener preferenza, valore -> val stringValue = value.toString () if (preferenza è ListPreference) // Per le preferenze di elenco, cerca il valore di visualizzazione corretto in // 'entries' della preferenza elenco. val listPreference = preferenza val index = listPreference.findIndexOfValue (stringValue) // Imposta il riepilogo in modo che rifletta il nuovo valore. preference.setSummary (if (index> = 0) listPreference.entries [index] else null) else if (preferenza è RingtonePreference) // Per le preferenze suoneria, cercare il valore di visualizzazione corretto // utilizzando RingtoneManager. if (TextUtils.isEmpty (stringValue)) // I valori vuoti corrispondono a 'silent' (nessuna suoneria). preference.setSummary ("Silent") else val ringtone = RingtoneManager.getRingtone (preference.getContext (), Uri.parse (stringValue)) if (ringtone == null) // Cancella il sommario se si è verificato un errore di ricerca . preference.setSummary (null) else // Imposta il riepilogo in modo che rifletta il nuovo nome // della visualizzazione della suoneria. val name = ringtone.getTitle (preference.getContext ()) preference.setSummary (name) else // Per tutte le altre preferenze, imposta il riepilogo sulla // rappresentazione della stringa semplice del valore. preference.summary = stringValue true private fun bindPreferenceSummaryToValue (preferenza: preferenza) // Imposta il listener in modo che guardi le variazioni di valore. preference.onPreferenceChangeListener = sBindPreferenceSummaryToValueListener // Attiva immediatamente il listener con il // valore corrente della preferenza. sBindPreferenceSummaryToValueListener.onPreferenceChange (preferenza, PreferenceManager .getDefaultSharedPreferences (preference.context) .getString (preference.key, ""))
Abbiamo una variabile sBindPreferenceSummaryToValueListener
questa è un'istanza di Preference.OnPreferenceChangeListener
. Questo è semplicemente un listener di modifiche alle preferenze che ci aiuterà ad aggiornare il riepilogo delle preferenze sul valore che l'utente ha selezionato. Controlliamo casi speciali, come quando la preferenza selezionata è a RingtonePreference
o a ListPreference
. Per questi tipi di preferenze, facciamo una gestione speciale per ottenere la stringa di riepilogo. Se la preferenza non è né (come un EditTextPreference
), abbiamo appena impostato il riepilogo sul valore di stringa della preferenza.
Dentro il bindPreferenceSummaryToValue ()
, impostiamo l'ascoltatore del cambiamento delle preferenze chiamando onPreferenceChangeListener
(in Java, lo è setOnPreferenceChangeListener
invece) sul Preferenza
oggetto.
Ora esegui di nuovo il progetto per vedere come funziona!
Per iniziare a ricevere i valori delle preferenze per la schermata delle impostazioni, chiamiamo getDefaultSharedPreference ()
che è dentro il PreferenceManager
passare la classe a Contesto
oggetto delle preferenze i cui valori sono desiderati. Si noti che otteniamo i valori dall'impostazione predefinita SharedPreferences
per la nostra applicazione.
val prefs = PreferenceManager.getDefaultSharedPreferences (this) prefs.getBoolean ("checkbox", false) .toString () prefs.getString ("ringtone", "") prefs.getString (" text "," ") prefs.getString (" lista "," ")
Si chiama il metodo getter corrispondente per il tipo che si desidera recuperare il valore da in SharedPreferences
. Passa la chiave come primo argomento e il valore predefinito è il secondo argomento.
Ora che hai appreso le API coinvolte per creare una schermata delle impostazioni da zero in Android, ti mostrerò una scorciatoia che renderà più veloce la prossima volta. Puoi scegliere di utilizzare un modello invece di codificare una schermata delle impostazioni da zero.
Android Studio fornisce modelli di codice che seguono le best practice di progettazione e sviluppo di Android. Questi modelli di codice esistenti (disponibili in Java e Kotlin) possono aiutarti a avviare rapidamente il tuo progetto. È possibile utilizzare uno di questi modelli per creare una schermata delle impostazioni.
Per utilizzare questa comoda funzionalità per un nuovo progetto, innanzitutto avviare Android Studio.
Immettere il nome dell'applicazione e fare clic su Il prossimo pulsante. Puoi lasciare i valori predefiniti così come sono nel Target dispositivi Android dialogo.
Clicca il Il prossimo pulsante di nuovo.
Nel Inserisci un'attività al cellulare finestra di dialogo, scorrere verso il basso e selezionare Attività delle impostazioni. Clicca il Il prossimo pulsante dopo.
Nell'ultima finestra di dialogo, puoi rinominare il nome dell'attività, il nome del layout o il titolo se lo desideri. Infine, fai clic sul finire pulsante per accettare tutte le configurazioni.
Android Studio ci ha ora aiutato a creare un progetto con un'attività di impostazioni. Veramente cool! Si consiglia vivamente di esplorare il codice generato.
Puoi anche utilizzare i modelli per un progetto Android Studio già esistente. Semplicemente vai File> Nuovo> Attività> Attività Impostazioni.
Tieni presente che i modelli inclusi in Android Studio sono adatti per layout semplici e applicazioni di base, ma se vuoi davvero avviare la tua app, potresti prendere in considerazione alcuni dei modelli di app disponibili da Envato Market.
Sono un enorme risparmio di tempo per gli sviluppatori esperti, aiutandoli a tagliare la barra della creazione di un'app da zero e concentrare i loro talenti invece sulle parti uniche e personalizzate della creazione di una nuova app
In questo tutorial, hai imparato come creare le impostazioni delle app in Android da zero. Abbiamo anche esplorato come utilizzare facilmente e rapidamente i modelli di Studio Android per creare le impostazioni dell'app.
Consiglio vivamente di verificare le linee guida sulla progettazione dei materiali ufficiali per le impostazioni per ulteriori informazioni su come progettare e utilizzare correttamente le impostazioni in Android. Inoltre, consulta la guida API ufficiale per ulteriori informazioni su altre API per la creazione di un'attività delle impostazioni.
Per ulteriori informazioni sulla codifica per Android, consulta alcuni dei nostri altri corsi e tutorial qui su Envato Tuts+!