Înțelegerea aspectului este importantă pentru un design bun al aplicațiilor Android. În acest tutorial, veți afla totul despre aspecte relative, care organizează controale ale interfeței utilizator sau widget-uri, pe ecran în relație unul cu celălalt sau cu aspectul părintelui lor. Atunci când este folosit corect, layout-urile relative pot fi structura puternică și flexibilă pe care pot fi proiectate multe interfețe utilizator interesante pentru aplicații Android.
După aranjamentele liniare, care afișează controalele într-un singur rând sau coloană, layout-urile relative sunt unul dintre cele mai comune tipuri de layout-uri utilizate de designerii de interfață cu utilizatorii Android. La fel ca și alte layout-uri, layouts relative pot fi definite în resurse XML layout sau programmatic în codul Java al aplicației. Aspectul relativ funcționează la fel de mult ca și numele său: acesta organizează controale relative unul față de celălalt sau cu controlul parental propriu-zis.
Ce inseamna asta? Aceasta înseamnă că comenzile pentru copii, cum ar fi butoanele ImageView, TextView și Button, pot fi plasate deasupra, dedesubt, la stânga sau la dreapta, una de cealaltă. Comenzile pentru copii pot fi, de asemenea, plasate în raport cu părintele (containerul de aspect relevant), inclusiv plasarea comenzilor aliniate la marginile de sus, de jos, stânga sau dreapta ale aspectului.
Poziția relativă pentru planificarea copilului este definită folosind reguli. Aceste reguli definesc modul în care sunt afișate comenzile din cadrul planului relativ. Pentru lista completă a regulilor pentru aspecte relative, consultați documentația Android SDK pentru clasa RelativeLayout. Atribuiile XML asociate pentru utilizarea în resursele XML sunt, de asemenea, definite în documentație.
NOTĂ: Regulile impun ca fiecare element de control al copilului să aibă atributul id setat corespunzător.
Aspectele relative sunt cel mai bine explicate folosind un exemplu. Să presupunem că vrem să proiectăm un ecran cu un control EditText și un buton de control. Vrem butonul să apară în partea dreaptă a butonului EditText. Prin urmare, am putea defini o structură relativă cu două comenzi pentru copii: EditText și Button. Controlul EditText poate avea o regulă care spune: aliniați acest control în partea stângă a controlului părinte (aspectul) și în partea stângă a unui al doilea control - un buton de control. Între timp, comanda Button poate avea o regulă care spune: aliniați acest control la partea dreaptă a controlului părinte (aspectul).
Următoarele figuri arată doar un astfel de aspect relativ, afișat în modul portret sau peisaj. Aspectul relativ are două comenzi pentru copii: un control EditText și un buton de control.
Modul cel mai convenabil și mai ușor de întreținut pentru a proiecta interfețele utilizatorilor de aplicații este crearea de resurse XML de aspect. Această metodă simplifică foarte mult procesul de proiectare UI, deplasând o mare parte din crearea și structura statică a controalelor interfeței utilizator și definirea atributelor de control, în XML, în loc de a aluneca codul.
Resursele de aspect XML trebuie să fie stocate în ierarhia directorului / res / layout project. Să aruncăm o privire la aspectul relativ introdus în secțiunea anterioară. Acest fișier de resurse de dispunere, desemnat corespunzător /res/layout/relative.xml, este definit în XML după cum urmează:
Amintiți-vă că, din cadrul activității, este necesară numai o singură linie de cod în cadrul metodei onCreate () pentru a încărca și a afișa o resursă de aspect pe ecran. Dacă resursa de dispunere a fost stocată în fișierul /res/layout/relative.xml, acea linie de cod ar fi:
setContentView (R.layout.relative);
Această dispunere relativă are lățimea și înălțimea setată pentru a umple ecranul și trei reguli configurate pe comenzile sale pentru copii:
De asemenea, puteți crea și configura programatic machete relative. Acest lucru se face folosind clasa RelativeLayout (android.widget.Relative). Veți găsi parametrii specifici copiilor în clasa RelativeLayout.LayoutParams. De asemenea, parametrii tipici de aspect (android.view.ViewGroup.LayoutParams), cum ar fi layout_height și layout_width, precum și parametrii de margine (ViewGroup.MarginLayoutParams), se aplică încă obiectelor RelativeLayout.
În loc să încărcați o resursă de aspect direct utilizând metoda setContentView () așa cum este arătat mai devreme, trebuie să construiți conținutul ecranului în Java și apoi să furnizați un obiect de aspect părinte care conține toate conținutul de control care să fie afișat ca vizualizări copil la setContentView metodă. În acest caz, aspectul părintelui dvs. ar fi aspectul relativ.
De exemplu, următorul cod ilustrează modul în care trebuie să creați în mod programatic o activitate de instanțiere a unui raport relativ și să plasați un control TextView și un buton în el în metoda onCreate (), la fel ca cel prezentat în secțiunea anterioară:
public void onCreate (bundle savedInstanceState) super.onCreate (savedInstanceState); // setContentView (R.layout.relative); EditareText ed = new EditText (this); RelativeLayout.LayoutParams params = noi RelativeLayout.LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); params.addRule (RelativeLayout.ALIGN_PARENT_LEFT); // utilizați același id definat la adăugarea butonului params.addRule (RelativeLayout.LEFT_OF, 1001); ed.setLayoutParams (params); ed.setHint ("Introduceți un text ..."); Buton but1 = Buton nou (acest); RelativeLayout.LayoutParams params2 = noi relativeLayout.LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params2.addRule (RelativeLayout.ALIGN_PARENT_RIGHT); but1.setLayoutParams (params2); but1.setText ("Apăsați aici!"); // da butonul un ID pe care îl știm but1.setId (1001); Suprafața relativăLayout1 = noua valoare relativă (aceasta); layout1.setLayoutParams (noua LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); layout1.addView (ed); layout1.addView (but1); setContentView (layout1);
Să aruncăm o privire mai atentă la lista de cod Java de mai sus. Mai intai creem un control EditText ca normal. Îi oferim niște parametri RelativeLayout și apoi stabilim regulile. În acest caz, vom crea două reguli pentru controlul EditText.
Apoi, vom crea un buton de control și vom stabili regula lui (aliniați la marginea din dreapta a aspectului părinte). În cele din urmă, vom crea un obiect RelativeLayout, vom seta parametrii, vom adăuga cele două controale child folosind metoda addView () și vom încărca aspectul relativ pentru a fi afișat folosind metoda setContentView ().
După cum puteți vedea, codul poate crește rapid în mărime deoarece se adaugă mai multe controale pe ecran. Pentru organizare și mentenabilitate, definirea și folosirea planurilor este cel mai bine lăsată pentru caz ciudat decât pentru normă.
Acum, să vorbim puțin despre atributele care ajută la configurarea unui aspect relativ și a controalelor copilului acestuia. Unele atribute specifice se aplică aspectelor relative - și anume regulile copilului, inclusiv:
De asemenea, atributele generale de tip ViewGroup se aplică aspectelor relative. Acestea includ:
Acum, să punem în aplicare câteva dintre aceste reguli!
Să ne uităm la un design mai complex al ecranului. În scopul acestui exercițiu, vom începe prin a privi designul final al ecranului și apoi vom lucra înapoi, discutând caracteristicile relative ale aspectului și regulile utilizate pentru a obține acest rezultat final.
Să presupunem că vrem să proiectăm un ecran care arată astfel:
Pentru a proiecta acest ecran folosind un aspect relativ, continuați cu pașii următori.
Mai întâi, definiți un aspect relativ în fișierul de resurse XML. Deoarece doriți ca acest aspect să controleze conținutul întregului ecran, setați atributele de înălțime și lățime pentru a completa funcția_parent. Fișierul de resurse XML ar trebui să pară acum astfel:
Apoi, vom determina ce copil controlează de care avem nevoie. În acest caz, avem nevoie de șapte controale TextView (câte unul pentru fiecare culoare). Configurați-le ca în mod normal, setând atributele de text la șiruri de caractere, culori de fundal, dimensiuni de fonturi etc. Localizați fiecare dintre aceste controale în aspectul dvs. relativ.
În continuare, definim regulile pentru fiecare control al copilului, pentru a le face să atragă în locurile potrivite:
Dacă definiți aceste reguli în fișierul de resurse XML, ar trebui să pară acum ceva similar:
Iată câteva sfaturi pentru a lucra cu aspecte relative.
Excepția ilegală de stat: dependențele circulare nu pot exista într-un raport relativ
Poate fi util să reamintim că regulile relative de aspect sunt aplicate într-o singură trecere.
Interfețele pentru utilizatorii de aplicații Android sunt definite folosind layout-uri, iar layout-urile relative sunt unul dintre tipurile de layout-uri folosite pentru a crea ecrane de aplicații care sunt atât flexibile, cât și puternice. Aspectul relativ permite controlului copilului să fie organizat relativ unul față de celălalt și relativ la părinte (marginile și centrat vertical și orizontal). Odată ce ați stăpânit regulile modului în care sunt structurate relativ, ele pot fi incredibil de versatile, permițându-vă să creați aspecte complexe fără a crește cheltuielile de amenajare a diferitelor aspecte, îmbunătățind astfel performanța.