9. diel - Android programovanie - ConstraintLayout - Vytvorenie obmedzenia
V predchádzajúcom kvíze, Kvíz - Úvod do Java Android základov, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.
V dnešnej lekcii sa zoznámime s kontajnerom ConstraintLayout
,
ktorý je v Android Štúdiu používaný ako predvolený layout k rozloženiu
komponentov na aktivite. ConstraintLayout
disponuje slušnú
kôpkou funkcií, ktoré z neho robia mocného pomocníka pri návrhu našich
aktivít. My si popíšeme hlavne tie základné. Aby nechýbala praktická
ukážka, ukážeme si všetko na vzhľade projekte SimpleCalc
, kde
sme vytvárali veľmi jednoduchú kalkulačku. Vzhľad kalkulačky vyzeral
takto:
ConstraintLayout
ConstraintLayout
umožňuje vytvárať zložitá rozvrhnutie
grafického používateľského rozhrania. Tento layout je veľmi podobný
RelativeLayout
v tom, že všetky komponenty sú rozložené podľa
vzťahov medzi sebou a / alebo nadradeným objektom, často tak, že je k sebe
prichytíme. Tieto vzťahy definujeme pomocou tzv. Obmedzenia
(constraints), viď ďalej.
Vytvorme teraz znovu požadovaný vzhľad kalkulačky zo základných
komponentov. Ide skutočne o veľmi jednoduchý dizajn bez žiadnych zložitých
prvkov. Ukážeme si pri tom ďalšie možnosti pozicovanie komponentov našej
kalkulačky v kontajneri ConstraintLayout
.
V Android Štúdiu otvoríme súbor activity_main.xml
a okno s
náhľadom prepneme na zobrazenie Blueprint, ktoré je pre túto prácu
najvhodnejšie:
Pridanie komponenty do layoutu
Teraz postupne pretiahneme z okna Palette do okna rozloženia nasledujúce komponenty:
EditText
(políčko pre zadávanie textu),Spinner
(rozbaľovacie menu),TextView
(text) aButton
(tlačidlo).
Komponenty zostanú tam, kde ich necháme, aj keď nemajú definovaná žiadne obmedzenia. Je tomu tak len preto, aby bola práca v editore ľahšie.
Pokiaľ ale aplikáciu takto, bez nutných obmedzení spustíme, bude výsledkom, že sa všetky vložené komponenty vykreslí v ľavom hornom rohu!
Hoci chýbajúce obmedzenie nespôsobí chybu kompilácie, editor rozloženie označuje chýbajúce obmedzenia ako chybu na paneli nástrojov:
Tu sme upozornení na chýbajúci horizontálne i vertikálne obmedzenia všetkých vložených komponentov. Poďme sa teda na obmedzenie pozrieť.
Obmedzenia
Obmedzením rozumejme najmä prichytenie komponenty k nejakej inej z nejakej jej strany. Ďalšie možnosti si vysvetlíme ďalej. Každé obmedzenie predstavuje spojenie alebo zarovnanie s inou komponentom, nadradeným layoutom alebo neviditeľným vodítkom.
Obmedzeniami (constraints) definujeme pozíciu komponenty. Každá vložená komponent musí mať aspoň jedno horizontálne a jedno vertikálne obmedzenia, ktorými definujeme polohu komponenty v danej osi. Jednoducho komponent k niečomu pripneme.
Vytvorenie obmedzenia (constraints)
Obmedzenie môžeme nastaviť tromi spôsobmi:
- Pridaním potrebného kódu v XML
- V Preview myší
- V atribútom vybrané komponenty
Všetky tri spôsoby si ukážeme na nastavenie obmedzenia prvého zadávacieho políčka našej kalkulačky.
1. Nastavenie obmedzení v XML
Tento spôsob je najmenej pohodlný. Nasledujúci kód pridá políčku
horizontálne obmedzenia tak, že ho prichytia k pravej aj ľavej strane
nadradeného objektu (ktorým je ConstraintLayout
). Tým, že
layout s tlačidlami obmedzíme na ľavú i pravú stranu
layoutu, ho horizontálne vycentrujeme. Vertikálne obmedzenie
je potom vytvorené iba prichytením k hornej hrane layoutu:
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"
2. Nastavenie obmedzení v Preview myší
To isté, čo sme nastavili vyššie, si skúsime nastaviť niekoľkými ťahmi myši v Preview. Ako je naznačené žltou farbou na nasledujúcom obrázku, postupne uchopíme každý príslušný kruhový úchyt pre obmedzenie a pretiahneme myšou k okraju layoutu (alebo iné komponenty):
Výsledok bude vyzerať takto:
Možno ste si všimli, že práve editovaný EditText
nie je
úplne "prilepený" k okrajom layoutu, ale je tu kúsok medzera. Je to preto,
že nadradený layout má nastavený atribút padding
.
3. Nastavenie obmedzení v atribútov komponenty
Tretím spôsobom nastavenie obmedzenia prvého políčka kalkulačky je
označenie príslušnej komponenty (v okne Preview alebo v okne
Component Tree). Potom v okne Attributes klikneme na tlačidlo
+
tej strany komponenty, ktoré chceme obmedzenia nastaviť:
Po kliknutí na +
je automaticky vytvorené obmedzenie a je
nastavený margin (medzera), ktorého veľkosť zodpovedá aktuálnej pozícii
komponenty, v ktorej sa nachádzala pred pridaním obmedzení. Tento margin
môžeme samozrejme zmeniť.
V prípade prvého políčka kalkulačky klikneme na ľavej a pravej
+
a obaja postranné marginy nastavíme na 0
. Tým je
políčko horizontálne vycentrované. Aby bolo políčko roztiahnuté na celú
šírku displeja, musíme navyše nastaviť v okne Attributes jeho
atribút layout_width
na hodnotu
0dp (match constraint)
. Vertikálne obmedzenia políčka vytvoríme
kliknutím na hornej +
. Opäť postrážime, aby margin bol na
hodnote 0
, pretože chceme mať prvé políčko "prilepené" úplne
hore.
Odstránenie obmedzení
Pojmú téma komplexne, aby sme s ConstraintLayout
vedeli sami
pracovať. Nové obmedzenia si teraz môžeme skúsiť zas odstrániť. Okrem
toho, že samozrejme môžeme priamo v XML kóde odstrániť príslušné
atribúty, máme tieto ďalšie možnosti odstránenia obmedzenia:
- V Preview
- V atribútom vybrané komponenty
- Odstránenie obmedzenia v Preview
Tu obmedzenie odstránime označením príslušného obmedzenia a stlačením tlačidla Del na klávesnici alebo nabehnutím myši na príslušné obmedzenia pri stlačené klávese Ctrl (čo spôsobí sčervenanie tohto obmedzenia) a kliknutím na toto obmedzenie:
2. Odstránenie obmedzenia v atribút komponenty
Myšou prejdeme na miesto podľa nasledujúceho obrázku a po zobrazení krížika klikneme:
Možno ste si všimli, že niekedy je v Preview obmedzenia znázornené čiarou a niekedy "pružinkou", spájajúcej dané objekty. Pružinka znázorňuje "protichodné sily", kedy je komponent napr. "Priťahovaná" k dvom protiľahlým stenám a tým je centrovaná.
V budúcej lekcii, Android programovanie - ConstraintLayout - Druhy obmedzenia , si ukážeme druhy obmedzení ConstraintLayout vrátane praktických ukážok použitia.