Cum să codificați un ecran de setări într-o aplicație Android

Ce veți crea

Echipa de design material din Google oferă o definiție clară a setărilor din aplicația dvs. Android:

Setările aplicației permit utilizatorilor să indice preferințele pentru modul în care ar trebui să se comporte o aplicație.

De asemenea, Google afirmă că utilizatorii dvs. ar trebui să navigheze la setările aplicației fie din meniul de navigare lateral, fie din meniul barei de instrumente - cu un element etichetat Setări

Includerea setărilor din aplicație vă oferă utilizatorilor puterea de a controla o parte din funcționalitatea aplicației dvs. Acest lucru face ca utilizatorii dvs. să fie fericiți în loc de furie - deoarece aceștia au acum controlul asupra comportamentului aplicației. 

Este foarte recomandat să acordați acces la setările aplicației. Acest lucru va oferi utilizatorilor dvs. o experiență mai bună pentru utilizatori, ceea ce duce la o mai bună revizuire a magazinului Google Play, ceea ce duce, în cele din urmă, la un număr mai mare de descărcări de aplicații (care sporesc veniturile). 

Presupun că trebuie să fi interacționat cu setările unei aplicații pe dispozitiv, de exemplu selectând un ton de apel prestabilit sau controlând confidențialitatea aplicației. Aproape toate cele mai populare aplicații pe care le-ați descărcat sau le descărcați în magazinul Google Play includ un ecran de setări pentru a vă controla comportamentul aplicației. 

Un exemplu de aplicație populară care are un ecran de setări este aplicația Chrome pentru Android de la Google. În ecranul de setări al aplicației, utilizatorii pot alege motorul de căutare prestabilit, pot schimba comportamentul de notificare, pot controla confidențialitatea utilizatorilor etc. Puteți vedea acest lucru prin descărcarea aplicației Chrome din magazinul Google Play (dacă nu îl aveți deja dispozitivul tau). Următoarea captura de ecran este din aplicația Chrome, afișând ecranul cu setările aplicației.

În acest post, veți învăța cum să creați un ecran de setări de aplicații de la zero și, de asemenea, cum să citiți valorile pe care le-a selectat utilizatorul din setările aplicației. Pentru un bonus suplimentar, veți afla, de asemenea, cum să utilizați funcția șabloanelor Android Studio pentru a vă lansa rapid proiectul cu un ecran de setări. 

Un exemplu de proiect (în Kotlin) pentru acest tutorial poate fi găsit pe replica noastră GitHub, pentru a putea urmări cu ușurință.

Cerințe preliminare

Pentru a putea urma acest tutorial, veți avea nevoie de:

  • O înțelegere de bază a unor interfețe Android API (cum ar fi SharedPreferences)
  • Android Studio 3.0 sau o versiune ulterioară
  • Kotlin plugin 1.1.51 sau mai mare

1. Creați un proiect Android Studio

Activați Android Studio și creați un nou proiect (îl puteți numi SettingsScreenDemo) cu o activitate goală numită SettingsActivity. Asigurați-vă că verificați, de asemenea Includeți suportul Kotlin Caseta de bifat. 

2. Crearea unui a PreferenceFragment

Pentru a sprijini API Level 11 (Honeycomb) și mai sus, putem folosi PreferenceFragment. Această clasă este pur și simplu a Fragment care arată o ierarhie a Preferinţă obiecte ca liste.

importați android.os.Bundle import android.poster.v7.app.AppCompatActivity ClassActivity: AppCompatActivity () override fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) dacă (fragmentManager.findFragmentById (android.R.id.content) == null) fragmentManager.beginTransaction () .add (android.R.id.content, SettingsFragment ()). com () clasa SettingsFragment: PreferenceFragment () override fun onCreate (salvatInstanceState: Bundle?) super.onCreate (savedInstanceState) addPreferencesFromResource (R.xml.preferences)

În codul de mai sus, am creat o clasă imbricată SettingsFragment interior SettingsActivity (deoarece SetttingsFragment clasa este atât de mică). Rețineți că clasa noastră SettingsFragment extinde PreferenceFragment superclass și are o metodă addPrerenceFromResource interior onCreate (). În această metodă, i-am dat un ID de resurse R.xml.preference din XML de preferință pentru lansare - atunci când Fragment este încărcat. În cele din urmă, găzduim Fragmentul la activitate utilizând pur și simplu FragmentTransaction pentru ao adăuga la interiorul UI onCreate () de SettingsActivity.

3. Crearea preferințelor noastre

Creați un fișier XML și denumiți-l preferences.xml. Salvați acest fișier în interiorul res / xml director în proiectul dvs. de aplicație. Rețineți că puteți da acestui fișier orice nume, dar este foarte recomandat să rămânem cu numele convențional "preferințe". De asemenea, de obicei, trebuie să aveți un singur fișier într-un proiect de aplicație.

       

Nodul rădăcină pentru noi preferinţe.xml fișierul trebuie să fie a element. În interiorul acestui element rădăcină, avem acum individul nostru Preferinţă. Iată atributele comune asociate cu a Preferinţă:

  • Android: cheie: acest atribut este folosit pentru a obține valoarea în SharedPreferences obiect.
  • Android: titlu: stabilește titlul pentru Preferinţă. Acesta este textul îndrăzneț.
  • Android: rezumat: stabilește rezumatul pentru Preferinţă (acest lucru nu este necesar). Acesta este textul decolorat de sub titlu.
  • Android: defaultValue: stabilește valoarea implicită pentru Preferinţă

Vom trece prin fiecare Preferinţă ne-am definit mai devreme. Rețineți că puteți adăuga sau personaliza o Preferinţă prin intermediul editorului de preferințe Android Studio, similar cu editorul de resurse de aspect cu care sunteți deja familiarizat. Puteți alege fie să adăugați / editați fișierul XML preferat direct în modul "Text", fie să utilizați interfața de transfer drag-and-drop în modul "Design".

După cum puteți vedea, în acest editor puteți să trageți și să renunțați la orice Preferinţă în secțiunea paletă (pe partea stângă). Odată abandonată, trebuie să o selectați și să modificați atributele acesteia pe panoul atributelor (în partea dreaptă) a editorului. Rețineți că, în mod prestabilit, ni se dau câteva atribute de modificat. Pentru a vizualiza sau a modifica toate atributele asociate cu un anumit Preferinţă, asigurați-vă că faceți clic pe Vizualizați toate atributele din partea de jos a panoului atributelor. Acest lucru este foarte asemănător cu editorul de layout pe care deja îl cunoașteți. 

Acum, hai să trecem prin fiecare Preferinţă entitățile pe care le avem. 

Bifați caseta de selectare

A CheckBoxPreference este pur și simplu a Caseta de bifat widget inclus în ecranul de preferințe. Acest Preferinţă returnează valoarea "true" dacă este bifată sau "false" altfel. Cu alte cuvinte, returnează un boolean în funcție de starea widget-ului.

Alte atribute pe care le puteți adăuga la a CheckBoxPreference sunteți:

  • Android: summaryOff: stabilește rezumatul pentru Preferinţă într-un ecran de preferință când nu este bifată.
  • Android: summaryOn: stabilește rezumatul pentru Preferinţă într-un ecran de preferință când este verificat.
  • Android: disableDependentsState: Starea (adevărată pentru, sau falsă pentru oprire) care determină dezactivarea persoanelor dependente. Poate fi o valoare booleană, cum ar fi "adevărat" sau "fals".

Schimbați preferința

SwitchPreference îndeplinește o funcționalitate similară cu CheckBoxPreference. Oferă o opțiune comutare de două state ("on" sau "off"). Aceasta folosește a Intrerupator widgetul care permite utilizatorului să alunece stânga ("oprit") și dreapta ("on"). Acest Preferinţă include, de asemenea, atributele descrise pentru CheckBoxPreference de mai sus. În plus, are următoarele atribute:

  • Android: switchTextOff: setează textul utilizat pe comutator în timp ce este în starea "off". 
  • Android: switchTextOn: setează textul utilizat pe comutatorul însuși când este în starea "on". 

Editare preferință

Acest Preferinţă, când se dă clic pe el, afișează un dialog pentru ca utilizatorul să introducă un text de intrare. Utilizează Editează textul widget - inclusiv toate atributele acelui widget pe care deja îl cunoașteți.

Rețineți că valoarea stocată în SharedPreferences este un șir.


Listă preferință

Acest tip de Preferinţă va afișa o listă de intrări într-o fereastră de dialog atunci când este selectată. Aici puteți specifica o pereche de resurse de tip string-array în XML-ul de preferință. Această resursă de arhivă conține pur și simplu o colecție de șiruri de caractere. Această resursă este situată la res / valori / arrays.xml.

   15 minute 30 minute 1 oră 3 ore 6 ore Nu   15 30 60 180 360 -1  

Iată eșantionul nostru ListPreference folosind această resursă. 

Am setat intrările și valorile de intrare folosind android: intrări și android: entryValues atribute.

  • android: intrări: matricea care poate fi citită de om să prezinte o listă.
  • android: entryValues: matricea pentru a găsi valoarea care trebuie salvată pentru o preferință atunci când este selectată o intrare din înregistrări.

De exemplu, dacă folosim numărul de minute în fiecare durată ca valori de intrare, atunci când utilizatorul alege o durată de timp (de exemplu, 30 de minute), valoarea întregului corespunzător va fi stocată în SharedPreferences (de exemplu 30).

Selectați preferința listei de preferințe

Aceasta este similară ListPreference dar în loc să avem butoane radio, avem casete de selectare. Cu alte cuvinte, utilizatorul poate selecta mai multe elemente din dialog. Rețineți că rezultatul este stocat într-un "set de șir" în SharedPreferences. Acest lucru poate fi recuperat folosind getStringSet ().

Preferință pentru tonuri de apel

Când un RingtonePreference este apăsat, este afișat un dialog care conține lista tonurilor de apel disponibile pe dispozitiv sau emulator.

  • Android: showDefault: dacă Ton de apel prestabilit va fi afișată opțiunea.
  • Android: showSilent: dacă a Tăcut opțiunea va fi afișată în listă. Utilizatorul poate selecta această opțiune dacă nu dorește să cânte un ton de apel.  

Rețineți că valoarea stocată în SharedPreferences pentru această preferință este un șir special. Acest șir special este un URI care indică a Furnizor de continut.

4. Crearea grupurilor de setări

Aceasta devine o problemă atunci când aveți o listă lungă de preferințe sau setări, deoarece utilizatorii pot avea probleme cu scanarea sau înțelegerea acestora. Pentru a rezolva această problemă, putem grupa preferințele noastre. Aruncați o privire la captura de ecran a aplicației Chrome pe care v-am arătat-o ​​din nou la început - observați-o că ați grupat preferințele în două categorii: Elementele de bază și Avansat. Acest lucru face ca utilizatorul să înțeleagă mai ușor preferințele și să nu facă lista prea copleșitoare.

Să ne uităm acum la cât de simplu este să îndeplinești această sarcină.

   ...   ...  

Pur și simplu ne înconjoară preferințele pe care dorim să le formăm într-un etichetați și dați fiecărui grup un titlu utilizând Android: titlu atribut.

5. Pornirea unui intenție

Rețineți că este posibil să deschideți o activitate făcând clic pe un element de preferință din ecranul de setări. Acest lucru poate fi util atunci când doriți să deschideți o pagină Web. Iată codul pentru a face acest lucru:

  

Aici am adăugat a element în interiorul element. 

  • Android: acțiune: stabilește acțiunea pentru intenție (aceasta este similară cu apelarea setAction () pe un obiect Intent). 
  • Android: targetClass: stabilește partea de clasă a numelui componentei (aceeași ca și cea de apel setComponent () pe un obiect Intent).
  • Android: targetPackage: Setează partea pachetului din numele componentei.
  • Android: date: Stabilește datele pentru a atribui (aceleași ca cele de apel setData () pe un obiect Intent). 

Pentru a deschide o pagină Web, de exemplu, puteți utiliza următoarele:

  

6. Legarea Rezumatului Preferinței la valoarea selectată

Să vedem acum cum să actualizăm rezumatul preferințelor cu valoarea selectată de utilizator. 

clasa SetăriActivitate: Clasa AppCompatActivity () // ... SettingsFragment: PreferenceFragment () suprascrie fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) addPreferencesFromResource (R.xml.preferences) bindPreferenceSummaryToValue (findPreference) bindPreferenceSummaryToValue (findPreference ("text")) bindPreferenceSummaryToValue (findPreference ("lista")) // ...

În această clasă, am creat o metodă de ajutor numită bindPreferenceSummaryToValue (), care este în interiorul obiectului nostru de companie, să actualizăm textul sumar al preferințelor cu valoarea pe care a selectat-o ​​utilizatorul. Am trecut-o a Preferinţă obiect ca argument. findPreference () va returna a Preferinţă folosind Preferinţăcheia. 

class SettingsActivitate: AppCompatActivity () // ... obiect companion / ** * Un ascultător de schimbare a valorii preferinței care actualizează rezumatul preferințelor * pentru a reflecta noua sa valoare. * / private val sBindPreferenceSummaryToValueListener = Preference.OnPreferenceChangeListener preferință, valoare -> val stringValue = value.toString () if (preferință este ListPreference) // Pentru preferințele de listă, căutați valoarea afișată corectă în // ' listă. val listPreference = preference val index = listPreference.findIndexOfValue (stringValue) // Setați rezumatul pentru a reflecta noua valoare. (dacă este (index> = 0) listPreference.entries [index] altceva null) altceva dacă (preferința este RingtonePreference) // Pentru preferințele pentru tonuri de apel, căutați valoarea corectă a afișării // folosind RingtoneManager. dacă TextUtils.isEmpty (stringValue)) // Valorile goale corespund cu "silent" (fără ton de apel).  else  RingtoneManager.getRingtone (preference.getContext (), Uri.parse (stringValue)) if (ringtone == null) // Eliminați rezumatul dacă a existat o eroare de căutare . preference.setSummary (null) altceva // Setați rezumatul pentru a reflecta noul afișaj // nume de apel / nume. val name = ringtone.getTitle (preference.getContext ()) preference.setSummary (name) altceva // Pentru toate celelalte preferințe, setați sumarul la reprezentarea simplă a șirului. preference.summary = stringValue true private fun bindPreferenceSummaryToValue (preferință: Preferință) // Setați ascultătorul să urmărească modificările de valoare. preference.onPreferenceChangeListener = sBindPreferenceSummaryToValueListener // Activați imediat ascultătorul cu valoarea curentă a preferinței. sBindPreferenceSummaryToValueListener.onPreferenceChange (preferință, PreferenceManager .getDefaultSharedPreferences (preference.context) .getString (preference.key, ""))

Avem o variabilă sBindPreferenceSummaryToValueListener care este un exemplu de Preference.OnPreferenceChangeListener. Acesta este pur și simplu un ascultător de schimbare a preferințelor care ne va ajuta să actualizăm rezumatul preferințelor la valoarea pe care a selectat-o ​​utilizatorul. Verificăm cazuri speciale, cum ar fi atunci când preferința selectată este a RingtonePreference sau a ListPreference. Pentru acele tipuri de preferințe, facem o manevrare specială pentru a obține șirul rezumat. Dacă preferința nu este nici (cum ar fi EditTextPreference), am setat rezumatul la valoarea șirului preferinței. 

În interiorul bindPreferenceSummaryToValue (), am setat ascultătorul pentru schimbarea preferinței sunând onPreferenceChangeListener (în Java, este setOnPreferenceChangeListener în schimb) pe Preferinţă obiect. 

Acum rulați din nou proiectul pentru a vedea cum funcționează toate!

7. Preluarea valorilor preferinței

Pentru a începe să obțineți valorile preferințelor pentru ecranul de setări, sunăm getDefaultSharedPreference () care este în interiorul PreferenceManager clasa-trecând-o a Context obiect al preferințelor ale căror valori sunt dorite. Rețineți că vom obține valorile din valorile implicite SharedPreferences pentru aplicația noastră. 

val prefs = PreferenceManager.getDefaultSharedPreferences (acest) prefs.getBoolean ("checkbox", false) .toString () prefs.getString ("ton de apel"") prefs.getString (" text ","") prefs.getString (" lista ","„)

Apelați metoda getter corespunzătoare pentru tipul de care dorim să preluăm valoarea de la SharedPreferences. Îi dai cheia ca primul argument, iar valoarea implicită este al doilea argument. 

8. Bonus: Folosind Șabloane Android Studio

Acum că ați învățat despre API-urile implicate pentru a crea un ecran de setări de la zero în Android, vă voi arăta o comandă rapidă care o va face mai rapidă data viitoare. Puteți alege să utilizați un șablon în loc să codați ecranul de setări de la zero. 

Android Studio oferă șabloane de cod care respectă cele mai bune practici de design și dezvoltare Android. Aceste șabloane de cod existente (disponibile în Java și Kotlin) vă pot ajuta să vă lansați rapid proiectul. Un astfel de șablon poate fi utilizat pentru a crea un ecran de setări. 

Pentru a utiliza această caracteristică la îndemână pentru un nou proiect, inițializați mai întâi Android Studio.

Introduceți numele aplicației și faceți clic pe Următor → buton. Puteți lăsa setările implicite așa cum sunt în Direcționați dispozitive Android dialog. 

Apasă pe Următor → butonul din nou.

În Adăuga o activitate pentru mobil dialog, derulați în jos și selectați Setări Activitate. Apasă pe Următor → după aceea. 

În ultimul dialog, puteți redenumi numele activității, numele planului sau titlul, dacă doriți. În cele din urmă, faceți clic pe finalizarea pentru a accepta toate configurațiile. 

Android Studio ne-a ajutat acum să creăm un proiect cu o activitate de setări. Foarte cool! Vă recomandăm cu tărie să explorați codul generat. 

Puteți utiliza și șabloane pentru un proiect Android deja deja existent. Pur și simplu du-te la Fișier> Nou> Activitate> Activitate setări.  

Rețineți că șabloanele care sunt incluse în versiunea Android Studio sunt bune pentru machete simple și pentru a face aplicații de bază, însă dacă doriți să lansați cu adevărat aplicația, puteți lua în considerare unele dintre șabloanele de aplicații disponibile de la Envato Market. 

Sunt un economizor de timp uriaș pentru dezvoltatorii cu experiență, ajutându-i să-și taie slogul de a crea o aplicație de la zero și să-și concentreze talentele în schimb pe părțile unice și personalizate ale creării unei noi aplicații

Concluzie

În acest tutorial, ați învățat cum să creați setările aplicației în Android de la zero. De asemenea, am explorat cum să utilizați cu ușurință și rapid șabloanele Android Studio pentru a crea setările aplicației. 

Vă recomandăm să consultați instrucțiunile oficiale de proiectare pentru setările pentru a afla mai multe despre cum să creați și să utilizați în mod corespunzător setările Android. De asemenea, consultați ghidul API oficial pentru a afla mai multe despre alte API-uri pentru a crea o activitate de setări. 

Pentru a afla mai multe despre codificarea pentru Android, consultați câteva dintre celelalte cursuri și tutoriale de aici, pe Envato Tuts+!


Cod