Layout je objekat unutar koga se definiše kako će se svaki element raspoređivati u odnosu na druge elemente, koja će mu biti veličina i slično. Aplikacija ne mora imati jedan glavni layout, već svaki layout može sadržati i neki drugi layout. Ponašanje vizuelnih elemenata se odvija kroz dve klase: View i ViewGroup. View je uglavnom zadužen da crtanje objekata i upravljanje korisničkim operacijama nad objektima (klikove mišem, prevlačenje mišem i slično), dok ViewGroup se bavi strukturom tih objekata i onime što korisnik ne vidi. Svaki element koji se nalazi korisničkom interfejsu je zapravo objekat neke potklase View, dok su layout-i potklase od ViewGroup.
Do sada smo videli samo LinearLayout. Osim njega, postoje i drugi layout-i u Android Studio, a neki od njih su:
ConstraintLayout je layout koji raspoređuje elemente u odnosu na druge elemente unutar ConstraintLayout ili samog ConstraintLayout u kojem se nalazi. Da bi se element postavio ispravno unutar ConstraintLayout, sve što je potrebno uraditi je da se zada barem jedno vertikalno i barem jedno horizontalno ograničenje (constraint). Izostavljanje ograničenja ne dovodi do greške u kompilaciji, ali će svakako Layout Editor da stavi upozorenje da nismo stavili uslov. Izostavljanje uslova može dovesti do toga da se elementi neispravno postave.
Da bi mogao da se koristi ConstraintLayout, potrebno je otvoriti Gradle skript build.gradle koji se nalazi u direktorijumu app. Potrebno je osigurati se da postoji ovakva linija koda:
repositories { google() }
Potom je potrebno naći deo dependencies i dodati unutar bloka naredbi sledeću liniju koda:
implementation "androidx.constraintlayout:constraintlayout:2.1.2"
Dakle, deo dependencies bi izgledao otprilike ovako:
dependencies { implementation "androidx.constraintlayout:constraintlayout:2.1.2" naredbe... }
Kada se element postavi unutar jednog ConstraintLayout, njegova pozicija je automatski (0, 0) (gornji levi ugao ekrana), iako to ne mora tako izgledati unutar Design prozora. Naime, Android Studio postavlja elemente tamo gde smo ih mi stavili prevlačenjem na ekran dok im ne definišemo poziciju. To je urađeno iz prostog razloga da bi se korisnicima olakšalo dizajniranje (ne bi bilo pregledno kada bi se svi elementi automatski postavili na isto mesto). Naš element na ekranu izgleda slično kao ovaj sa slike:
Zadavanje ograničenja funkcioniše tako što pritisnemo jedan od kružića i onda ga prevučemo do nekog elementa sa kojim želimo da ga vežemo. Brojevi koji se nalaze pored ukazuju na razdaljinu elementa od onog sa kojim smo ga vezali. Može se zamisliti da se zadavanjem ograničenja zapravo objekat vezuje elastičnom oprugom za određeni element. ConstraintLayout nas ne ograničava da zadajemo i suprotna ograničenja (levom je desno suprotno). U tom slučaju, pojaviće nam se dve "elastične opruge" sa obe strane objekta i objekat će se postaviti tako da zadovolji oba ograničenja. Ako je odgovarajuća dimenzija (za levo-desno širina, a za gore-dole dužina) postavljena na fixed ili wrap content, objekat će se centrirati. Moguće je odrediti na koju će stranu objekat više da naginje prostim prevlačenjem objekta.
Osim prostog vezivanja objekta za druge objekte, moguće je objekte uravnati na određeni način. Recimo, moguće je levu stranu objekta B uravnati sa levom stranom objekta A. Štaviše, može se čak podesiti da se objekat B bude pomeren za neku udaljenost od levog kraja objekta A, kao na slikama ispod.
Za ovaj tip poravnavanja objektata, potrebno je mišem odabrati (selektovati) sve elemente koje želimo na taj način da poravnamo, pa potom da kliknemo dugme Align i izaberemo opciju koja nam odgovara.
Moguće je objekte poravnati i na način da njihov tekst uvek bude poravnat. To se može izvesti tako što ćemo kliknuti desnim klikom na jedan od objekata, potom izabrati opciju Show Baseline i onda mišem prevući nit do drugog objekta. Rezultat bi trebalo da izgleda kao na slici ispod.
Moguće je definisati i Guideline objekat. To je jedna horizontalna ili vertikalna linija koja ima svoju poziciju. Ona se neće videti na aplikaciji, već se koristi kao pomoćni alat. Ovde se može koristiti da se objekti pozicioniraju u odnosu na nju. Guideline se nalazi u Guidelines tulbaru. Pozicioniranje u odnosu na liniju funkcioniše isto kao i kod ostalih elemenata. To bi na slici izgledalo ovako:
Guideline objekte je moguće koristiti i kao zid koji odvaja objekte. Sve što treba je otvoriti tulbar Guidelines i izabrati Vertical Barrier ili Horizontal Barrier. Potom je potrebno u delu Component Tree izabrati objekte koje želimo da se nađu unutar barijere i da ih prevučemo u barijeru koju smo napravili. Kada smo to uradili, kliknemo na barijeru u delu Component Tree, a onda u prozoru Attributes definišemo barrierDirection.
Više objekta je moguće vezati lancem. Dosadašnji načini pozicioniranja su više statični - jedan objekat se postavlja u odnosu na drugi, a drugome se pozicija ne menja. Pomoću lanaca je moguće dinamičnije postavljati objekte. Recimo, možemo objekte podesiti da budu jednako udaljeni jedni od drugih ili podesiti da objekti budu postavljeni u nekoj proporciji. Naravno, moguće je i veštački imitirati rad lanca korišćenjem ranijih mehanizama pozicioniranja, ali je to teže i veća je verovatnoća da se pogreši.
Lanac se pravi tako što se prvo izaberu (selektuju) oni objekti koje želimo da vežemo lancem, pa potom desnim klikom miša otvorimo padajući meni sa opcijama na kojem biramo opciju Chains i onda izaberemo želimo li horizontalni ili vertikalni lanac. Lanci omogućavaju sledeće četiri opcije: