Nu este nimic mai enervant decât încercarea de a naviga pe o interfață de utilizator prost concepută pe o aplicație mobilă. Modul în care se comportă aplicația în ceea ce privește navigarea pe ecran poate însemna diferența dintre un utilizator fericit și cel care vă aprinde în Android Market. Astăzi, ne concentrăm atenția asupra focus-ului, și anume: focalizarea controlului și modul de personalizare a acestuia în cadrul interfețelor de utilizator.
Metodele de introducere a dispozitivelor Android devin destul de diverse: plăcuțe direcționale, trackball-uri, ecrane tactile, tastaturi și multe altele. Unele dispozitive, cum ar fi tabletele, sunt navigate în primul rând prin atingere. Altele, cum ar fi Google TV, nu au nici un ecran tactil și se bazează pe dispozitive de intrare, cum ar fi cele cu un pad direcțional (d-pad).
Dezvoltatorii Android trebuie să înțeleagă modul în care utilizatorii navighează comenzile de pe ecran, cum și în ce ordine aceste controale de ecran câștigă și își pierd concentrarea și cum să personalizați ordinea focalizării de control asupra aplicațiilor lor pentru a oferi utilizatorilor o experiență fără frustrare.
Platforma Android se străduiește să determine o comandă de control adecvată pentru un anumit tip de structură. În multe cazuri, ordinea de focalizare implicită are sens. Totuși, acest lucru nu este întotdeauna cazul. Controlul pe care trebuie să-l concentreze în continuare este determinat de găsirea celui mai apropiat vecin vecin al controlului focalizat într-o anumită direcție (sus / jos / stânga / dreapta). Când există mai multe controale care se încadrează în descrierea respectivă, platforma scanează de la stânga la dreapta, de sus în jos, la fel ca și cum s-ar putea citi o carte în limba engleză.
Acest lucru are unele ramificații. În mod implicit, controlul de la cel mai înalt nivel al unui ecran nu ar trebui să se concentreze asupra faptului dacă utilizatorul naviga? Sus ?, și nu s-ar întâmpla nimic dacă utilizatorul a navigat? de la comanda de jos a ecranului. În mod similar, nu s-ar întâmpla nimic dacă utilizatorul a încercat să navigheze? de la controlul stâng, sau? de la cel mai drept control. Nu există ambalaj? de focalizare, implicit.
Acum, să aruncăm o privire asupra exemplului modului în care ați dori să modificați comportamentul implicit de focalizare pe ecran și să îl faceți să funcționeze pentru dvs. și utilizatorii dvs. De exemplu, să presupunem că doriți să forțați ordinea de focalizare să se înfășoare circular în jurul unui set de comenzi care formează o față de ceas.
Oferim codul sursă complet pentru aplicația de probă discutată în acest tutorial. Puteți descărca codul sursă de probă pe care îl furnizăm pentru examinare aici.
Mai întâi, creați sau editați fișierul de resurse de aspect utilizat de clasa dvs. de activitate, cum ar fi /res/layout/main.xml. De exemplu, următorul layout definește un fel de "ceas"? din comenzile Button folosind un raport relativ.
Stilul numit clockFaceNum este definit în fișierul /res/values/styles.xml după cum urmează:
Ecranul care rezultă arată astfel:
Să examinăm ordinea de focalizare prestabilită pentru comenzile butonului cu buton față în acest raport relativ. Dacă utilizatorul este focalizat pe butonul 12 și apasă? În jos? pe un pad directional, urmatorul control care se va concentra va fi butonul 11, urmat de Butonul 10, etc.
Implicit? calea este prezentată aici:
Să presupunem că vrem să forțăm utilizatorul să poată traversa comenzile față de ceas în sensul acelor de ceasornic sau în sens contrar acelor de ceasornic, spre deosebire de ordinea de focalizare implicită, așa cum se arată:
Putem defini acest comportament prin specificarea, pentru fiecare buton, a controlului care ar trebui să se concentreze în continuare. Există patru atribute XML pe care le puteți seta pe orice control de vizualizare pentru a defini ordinea de focalizare. Aceste atribute sunt:
Deci, să spunem că vrem toți? și? navigare pentru a permite utilizatorului să traverseze butonul de control al butonului ceasului în ordine în sensul acelor de ceasornic și tot? Up? și? Stânga? navigare pentru a permite utilizatorului să traverseze comenzile în ordine în sens orar. Atunci ar trebui să definim aceste patru atribute pentru fiecare control. De exemplu, dacă v-ați mutat? sau dreapta? din Butonul 12, ai ajunge la butonul 1. În mod similar, dacă te-ai mutat? sau? Stânga? din butonul 12, ai ajunge la Butonul 11.
O definiție completă a acestui nou aspect al aspectului ceasului arată astfel:
Prin urmare, noul nostru? , începând cu butonul 12, arată astfel:
În cele din urmă, iată un truc pentru setarea controlului implicit pentru a vă concentra pe un anumit ecran din fișierul de aspect. Puteți face acest lucru numai pentru un control de vizualizare în fiecare fișier.
Utilizați eticheta din Controlul vizualizării pentru a seta focalizarea inițială pe ecran. De exemplu, este posibil să dorim să actualizăm Butonul 12 pentru a obține focalizarea inițială, cum ar fi:
Puteți utiliza, desigur, și metoda programată pentru a seta focalizarea controlului, utilizând metoda de clasă View called requestFocus ().
Dezvoltatorii Android trebuie să-și amintească faptul că utilizatorii diferiți navighează pe o interfață de utilizator a unei aplicații utilizând diferite metode de introducere. Unele metode facilitează săriți între controalele de pe ecran, în timp ce altele pot face ca navigarea să fie oneroasă. Dezvoltatorii pot oferi comenzi personalizate care pot îmbunătăți considerabil experiența utilizatorului cu aplicația. Nu uitați de utilizatorii tastaturii. ?
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.
я я