Există numeroase tipuri de dialoguri disponibile în Android SDK, cum ar fi DatePickerDialogs, ProgressDialogs și dialoguri generice precum AlertDialogs. De asemenea, puteți crea propriile dialoguri personalizate pentru a fi utilizate în aplicațiile dvs..
Dialogurile personalizate precum dialogul de confirmare a parolei (Figura 1) sunt generate dintr-o clasă specială AlertDialog (android.app.AlertDialog). Aspectul personalizat al dialogului vine de la faptul că, în loc să utilizați tipurile de dialog încorporate, cu machetele lor implicite, încărcați un layout definit de dezvoltator. În acest tutorial rapid, furnizăm pașii necesari pentru implementarea unui dialog de confirmare a parolei personalizate pentru a colecta o nouă parolă de la utilizator.
Am discutat deja despre cum să adăugați comenzi de dialog de bază la clasele de activitate. Acest tutorial rapid se bazează pe cunoștințele dvs. din tutorialul de lucru cu interfața cu utilizatorul Android: Working With Dialogs. Puteți adăuga acest dialog la aplicația de probă de dialog furnizată în tutorialul menționat mai sus sau puteți crea o aplicație proprie.
Mai întâi trebuie să proiectați conținutul dialogului personalizat într-un fișier cu resurse. În acest caz, aspectul personalizat va fi un dialog de confirmare a parolei, ceea ce înseamnă că vom avea nevoie de două comenzi EditText pentru introducerea parolei. Vom mai dori și alte controale de text pentru etichete și altele asemenea.
Creați o resursă de aspect denumită /res/layout/password_dialog.xml. Conținutul acestui fișier de resurse este prezentat mai jos:
Acest fișier de aspect simplu se bazează pe câteva resurse de stringuri pe care va trebui să le definiți (etichete, vedeți codul sursă complet pentru detalii dacă aveți nevoie de ajutor pentru definirea resurselor șir), precum și atributul de tip de intrare EditText numit textPassword, care maschează parola așa cum este introdus în control. Această figură arată cum arată aspectul de aspect:
Acum, să adăugăm noul Dialog la clasa de activitate de bază.
Începeți prin editarea clasei dvs. de activitate și adăugând următoarea variabilă membru de clasă:
statică finală privată int MY_PASSWORD_DIALOG_ID = 4;
Aceasta definește un identificator de dialog unic pentru clasa noastră de activitate. Valoarea este un număr arbitrar, dar trebuie să fie unică în cadrul activității.
Pentru a crea instanțe Dialog, trebuie să furnizați un caz pentru dialogul de confirmare a parolei personalizate în metoda onCreateDialog () a clasei dvs. de activitate. Atunci când se numește metoda showDialog (), se declanșează un apel la această metodă, care trebuie să returneze instanța Dialog corespunzătoare. Prin urmare, începem instrucțiunea specifică a cazului pentru noul dvs. Dialog în cadrul metodei onCreateDialog () aici, prin umflarea fișierului nostru personalizat care a fost proiectat în pasul anterior și prin preluarea controalelor importante de care vom dori să interacționăm din interiorul acestuia folosind findViewById ).
cazul MY_PASSWORD_DIALOG_ID: LayoutInflater inflater = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE); final Vizualizare layout = inflater.inflate (R.layout.password_dialog, (ViewGroup) findViewById (R.id.root)); finală EditText parola1 = (EditText) layout.findViewById (R.id.EditText_Pwd1); finală EditText parola2 = (EditText) layout.findViewById (R.id.EditText_Pwd2); ultima TextView error = (TextView) layout.findViewById (R.id.TextView_PwdProblem); // TODO: Creați dialogul aici și returnați-l (consultați pașii ulteriori)
După cum puteți vedea, luăm două controale EditText care vor stoca datele de parolă, precum și controlul TextView unde putem afișa textul de eroare de parolă (parolele se potrivesc fie nu se potrivesc).
Următorul pas al implementării instrucțiunii onCreateDialog () pentru dialogul personalizat este înregistrarea unui TextWatcher pe cel de-al doilea control EditText, astfel încât să putem asculta și detecta potrivirile parolei ca tipuri de utilizatori pentru a afișa textul corect al șirului în eroare Controlul TextView (se potrivește / nu se potrivește).
Iată implementarea programului TextWatcher, care este alocat controlului de control al celei de-a doua parole EditText folosind metoda addTextChangedListener ().
parola2.addTextChangedListener (new TextWatcher () public void afterTextChanged (Editable s) String strPass1 = parola1.getText () .toString () String strPass2 = parola2.getText () )) error.setText (R.string.settings_pwd_equal); altceva error.setText (R.string.settings_pwd_not_equal); void public înainteTextChanged CharSequence s, int start, int count, int after) public void onTextChanged (CharSequence s, int start, int înainte, count count) );
TextWatcher are trei metode de apel invers, dar suntem interesați de implementarea metodei afterTextChanged (). Aici verificăm textul celor două controale EditText, le comparăm și le setăm textul de eroare în TextView. Iată ce ar putea afișa TextWatcher când se potrivesc parolele:
Următorul pas al implementării instrucțiunii casement onCreateDialog () pentru dialogul de confirmare a parolei personalizate este de a folosi clasa AlertDialog.Builder pentru a începe configurarea setărilor de dialog.
AlertDialog.Builder builder = nou AlertDialog.Builder (aceasta); builder.setTitle ("Introduceți parola"); builder.setView (aspect);
Am setat titlul dialogului utilizând metoda setTitle (), dar cel mai important lucru pe care îl facem aici este utilizarea metodei setView () pentru a atașa aspectul personalizat pe care tocmai l-am umflat în dialog. Acesta este modul în care modificăm comenzile utilizate în cadrul dialogului nostru, făcându-l să aibă un afișaj personalizat și un comportament definit de dezvoltator.
Apoi, trebuie să configurați butoanele pozitive și negative asociate dialogului nostru. Rețineți că dialogurile vor fi refolosite dacă sunt afișate de mai multe ori. Cu ajutorul dialogului de confirmare a parolei dorim să eliminăm cu forța dialogul din grupul de dialog al activității, astfel încât să nu poată fi refolosit. Nu vrem ca informațiile parole reziduale să fie stocate după ce dialogul de parolă este respins, indiferent dacă este confirmat sau respins.
builder.setNegativeButton (android.R.string.cancel, nou DialogInterface.OnClickListener () public void onClick (dialog DialogInterface, int careButton) removeDialog (MY_PASSWORD_DIALOG_ID);); builder.setPositiveButton (android.R.string.ok, noul DialogInterface.OnClickListener () public void onClick (dialog DialogInterface, int care) String strPassword1 = password1.getText () String strPassword2 = password2.getText ) .toString (); dacă (strPassword1.equals (strPassword2)) Toast.makeText (SuperSimpleDialogsActivity.this, "Matching passwords =" + strPassword2, Toast.LENGTH_SHORT) .show (); removeDialog (MY_PASSWORD_DIALOG_ID) ;
Vom scuza dialogul atât în serverele de selectare a clicurilor negative, cât și în cele pozitive, utilizând metoda removeDialog (). Cu toate acestea, în butonul de preluare a butonului pozitiv, preluăm și conținutul controalelor EditText și, dacă se potrivesc, afișează parola ca mesaj de Toast. În majoritatea cazurilor, nu ați utiliza un Toast, dar ați salva parola folosind metoda aleasă (preferințe etc.).
Dialogul dvs. este complet configurat. Acum, folosiți metoda create () a clasei AlertDialog.Builder pentru a genera AlertDialog corespunzător și pentru ao returna, încheind astfel instrucțiunea cazului pentru acest dialog în cadrul metodei onCreateDialog () din clasa Activity.
AlertDialog parolaDialog = builder.create (); retur passwordDialog;
În cele din urmă, sunteți gata să declanșați dialogul de confirmare a parolei pentru a afișa după cum este necesar. De exemplu, este posibil să adăugați un alt buton de control al butoanelor în ecranul Activității pentru a declanșa afișarea ferestrei de dialog. Operatorul său de clic poate arăta astfel:
public void onPasswordDialogButtonClick (Vizualizare v) showDialog (MY_PASSWORD_DIALOG_ID);
Dialogurile sunt un instrument puternic de interfață cu utilizatorul, care vă poate ajuta să păstrați interfața cu utilizatorul în aplicație flexibilă și neclară. Dialogurile pot conține propriile resurse de dispunere cu controale diferite, permițându-vă să creați comenzi personalizate precum dialogurile de confirmare a parolei. Dialogurile personalizate sunt, în general, create folosind clasa AlertDialog, cu toate caracteristicile sale.
Dezvoltatorii mobili Lauren Darcey și Shane Conder au coautorizat mai multe cărți despre dezvoltarea Android: o carte de programare în profunzime intitulată Dezvoltarea aplicațiilor fără fir Android, ediția a doua și Sams Teach Yourself Dezvoltare de aplicații Android în 24 de ore, ediția a doua. Când nu scriu, își petrec timpul dezvoltând software-ul mobil la compania lor și oferind servicii de consultanță. Acestea pot fi obținute prin e-mail la androidwirelessdev@[email protected], prin intermediul blogului lor la androidbook.blogspot.com, și pe Twitter @ androidwireless.
я я