3. diel - Material Dizajn a tvorba Theme v Compose
V minulej lekcii, Úvod do Jetpack Compose , sme si predstavili framework Jetpack Compose a
tiež sme spolu vytvorili prvú Hello World
aplikáciu. Vysvetlili
sme si základný koncept Compose a jeho výhody oproti návrhu v XML.
V dnešnom Compose tutoriále si predstavíme
Material Design, ktorý nám pomôže tvoriť kvalitnú grafiku
Kotlín aplikácií. Vysvetlíme si, čo je to
primárna a sekundárna farba. V praktickom príklade si
ukážeme, ako v Android Studiu definovať farebnú
schému a ako ju použiť pre naše Compose komponenty. Pre úpravu
nášho GUI pomocou konceptu Material Design použijeme Modifier
,
pomocou ktorého upravíme aj tvar tlačidla.
Material Design
Material Design je dizajnový jazyk vytvorený spoločnosťou Google v roku 2014. V dnešnej dobe sa bežne stretávame s dvoma verziami. Používa sa Material Design 2 alebo Material Design 3. Pre potreby nášho tutoriálu budeme používať skratky M2 a M3. M3 je vylepšením staršieho štandardu M2, ale vychádza z rovnakých princípov a základy zostávajú rovnaké. Oba jazyky pracujem s tieňmi, hĺbkou a riešia farebný, typografický aj tvarový systém.
Farebný systém
Základnou vecou pri tvorení aplikácie je zvolenie správnych farieb, ktoré budú reprezentovať našu značku. Nie je vhodné, aby sme v jednej aplikácii používali desať farieb a mali v nej napríklad desať rôzne farebných tlačidiel. To by mohlo byť pre užívateľov mätúce. Keď sa budeme držať štandardu M2 alebo M3, použijeme iba pár farieb. Celkový dojem z našej aplikácie bude tak ucelenejší.
V základe rozlišujeme primárnu a sekundárnu farbu. Primárnu farbu použijeme pri komponente, ktorý má byť viac viditeľný. Napríklad v prípade kalkulačky ju využijeme pri tlačidle rovná sa. Sekundárnu farbu použijeme na komponenty, ktoré nepotrebujeme až tak veľmi zvýrazniť. Máme k dispozícii niekoľko ďalších farebných rozlíšení, ale tie si budeme vysvetľovať postupne v ďalších dieloch.
Ako ďalšie spomeňme tzv. on
farby, ktorých
použitie si ukážeme ďalej v lekcii. Tieto farby nám slúžia napríklad na
písanie textu na určitý komponent, ako napríklad
tlačidlo.
Typografický systém
Ďalej je určite žiaduce, aby sme nepoužívali niekoľko fontov naraz a rôzne ich miešali. To má potom za výsledok opäť zlý dojem z aplikácie. Pokiaľ potrebujeme viac fontov, vyberieme iba tie, ktoré k sebe ladia. A znovu platí, čím menej rozdielnych typov písma použijeme, tým lepšie.
Na výber fontov použijeme webovú stránku priamo od Googlu, ktorá sa volá Google Fonts. Na nej nájdeme niekoľko stoviek fontov a Google nám aj pomôže vybrať k sebe tie správne.
Tvarový systém
Určite by sme chceli nejako "okoreniť" vzhľad našej aplikácie, aby
nevyzerala ako stovky ďalších. K tomu nám určite pomôžu rôzne tvary
našich komponentov. Vylepšíme tak dojem z našej aplikácie. Nebudú to už
klasické štvorcové tvary, ktoré pôsobia ohrane. S pomocou Compose a
Material Design vytvoríme zaoblené aj zastrihnuté tvary. Pre úpravu
komponentov využijeme už skôr spomínaný Modifier
.
Tvorba aplikácie v Material Design
Poďme si teraz ukázať všetko v praxi. Vytvoríme si nový projekt,
rovnako ako v minulých lekciách. Dnešný príklad pomenujeme
PrvniAplikaceMaterial
:
Farebné konštanty
Ako obvykle sa nám otvorí súbor MainActivity.kt
. Tento súbor
zatiaľ upravovať nebudeme. Najprv si ukážeme, kde môžeme meniť naše
farby. Hneď nad súborom MainActivity.kt
máme priečinok
ui.theme\
. Otvoríme ju av nej dvakrát klikneme na súbor
Color.kt
:
Tento súbor slúži na tvorbu farebných konštánt. Vďaka tomu potom nemusíme zakaždým písať hexadecimálne kódy farieb. Jeho pôvodný obsah vyzerá nasledovne:
package cz.itnetwork.prvniaplikacematerial.ui.theme import androidx.compose.ui.graphics.Color val Purple200 = Color(0xFFBB86FC) val Purple500 = Color(0xFF6200EE) val Purple700 = Color(0xFF3700B3) val Teal200 = Color(0xFF03DAC5)
Máme tu konštanty pre štyri farby, ktoré budeme používať v Material Design. Aby sme ich mohli používať, musíme ich pridať do farebnej schémy.
Farebná schéma
Schéma nám tiež automaticky vygenerovalo Android Studio, nájdeme ho v
súbore ui.theme/Theme.kt
.
Aby sme celý princíp stavby grafického vzhľadu správne pochopili, popíšme si, čo robí kód vo vygenerovanom súbore:
package cz.itnetwork.prvniaplikacematerial.ui.theme import ... private val DarkColorPalette = darkColors( primary = Purple200, primaryVariant = Purple700, secondary = Teal200 ) ...
Na začiatku je uvedený balíček našej aplikácie, nasledujú potrebné importy. Ďalej definujeme farebnú paletu pre tmavý režim. V nej určíme primárnu farbu, vrátane možnej varianty a potom vyberieme sekundárnu farbu.
Podobne vytvoríme farebnú paletu pre svetlý režim:
private val LightColorPalette = lightColors( primary = Purple500, primaryVariant = Purple700, secondary = Teal200 /* Other default colors to override background = Color.White, surface = Color.White, onPrimary = Color.White, onSecondary = Color.Black, onBackground = Color.Black, onSurface = Color.Black */ )
V druhom odseku máme zakomentovaný kód, v ktorom je možné definovať
spomínané on
farby. V predvolenom nastavení bude použitá biela
a čierna farba, ktoré sa vzájomne striedajú. Pokiaľ by sme to chceli
zmeniť, kód odkomentujeme a definujeme si v ňom vlastné farby.
Nakoniec v súbore máme @Composable
metódu:
@Composable fun PrvniAplikaceMaterialTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit) { val colors = if (darkTheme) { DarkColorPalette } else { LightColorPalette } MaterialTheme( colors = colors, typography = Typography, shapes = Shapes, content = content ) }
Táto metóda je anotovaná anotáciou @Composable
, môžeme ju
teda použiť pri tvorbe rozhrania. V prvej časti zisťujeme, či má byť
nastavený tmavý alebo svetlý režim a pomocou podmienky vyberieme
zodpovedajúcu farebnú paletu. V druhej časti odkazujeme na definované farby,
písmo a tvary nášho GUI.
Tvorba tlačidla
V aplikácii si teraz vytvoríme farebné tlačidlo. Začneme tak s
využitím farieb nášho MaterialTheme
. Tlačidlo definujeme v
súbore MainActivity.kt
. Najprv si tu vytvoríme
@Composable
metódu, pomenujeme ju BarevneTlacitko()
a
pridáme jej anotáciu @Preview
:
@Preview @Composable fun BarevneTlacitko() { Button( onClick = { /*TODO*/ }, colors = ButtonDefaults.buttonColors(backgroundColor = MaterialTheme.colors.primary) ) { Text( text = "Tlačidlo", color = MaterialTheme.colors.onPrimary, modifier = Modifier.background(MaterialTheme.colors.primary) ) } }
Pomocou parametra colors
sme nastavili tlačidlu farbu pozadia.
Použili sme príkaz ButtonDefaults.buttonColors()
av parametri sme
mu nastavili primárnu farbu z MaterialTheme
. Potom sme tlačidlu
pridali text a jeho farbu nastavili na hodnotu, ktorá je uložená v
MaterialTheme.colors.onPrimary
. Pri texte sme teda použili
on
farbu. Na nastavenie pozadia sme použili Modifier
s primárnou farbou.
V kóde máme aj farbu onPrimary
, ktorá je v
súbore Theme.kt
zakomentovaná. V našom prípade teda Android
Studio použije predvolené farby, tj bielu a čiernu. Ak by sme ich chceli
explicitne nastaviť, definujeme ich práve v súbore Theme.kt
.
Nastavenie farebnej schémy
Ďalej potrebujeme nastaviť konkrétny MaterialTheme
nášmu
tlačidlu. To docielime úplne jednoducho. Celý Button()
vložíme
do bloku PrvniAplikaceMaterialTheme
:
@Preview @Composable fun BarevneTlacitko() { PrvniAplikaceMaterialTheme { Button( onClick = { /*TODO*/ }, colors = ButtonDefaults.buttonColors(backgroundColor = MaterialTheme.colors.primary) ) { Text( text = "Tlačidlo", color = MaterialTheme.colors.onPrimary, modifier = Modifier.background(MaterialTheme.colors.primary) ) } } }
Takto nastavený MaterialTheme
bude použitý pre všetky
elementy vo vnútri bloku. Zmení teda aj vzhľad komponentov vytvorených v
iných @Composable
metódach, pokiaľ sú súčasťou bloku.
Všetky zmeny môžeme pozorovať v režime Split:
Úprava tvaru tlačidla
Na záver si ukážeme, ako zmeniť tvar tlačidla. To urobíme opäť
pomocou Modifier
:
Button( onClick = { /*TODO*/ }, modifier = Modifier.clip(CutCornerShape(16.dp)), colors = ButtonDefaults.buttonColors(backgroundColor = MaterialTheme.colors.primary) ) { Text( text = "Tlačidlo", color = MaterialTheme.colors.onPrimary, modifier = Modifier.background(MaterialTheme.colors.primary) ) }
Pridali sme parameter modifier
do komponentu
Button()
. Tlačidlu sme v ňom nastavili odstrihnutý tvar.
Výsledok môžeme vidieť v Split režime:
Vidíme, že Modifier
využijeme aj na úpravy tvarov
komponentov. Môžeme ho použiť pre ktorýkoľvek komponent v
Compose, dokonca aj pre naše vlastné. Tým ale jeho využitie nekončí, ako
uvidíme v ďalších lekciách.
V budúcej lekcii, Jednoduchá kalkulačka v Compose - Tvorba komponentov , začneme tvoriť kalkulačku. Pripravíme si tlačidlá pre jednotlivé početné operácie, ktoré budeme používať v našom grafickom rozhraní a ukážeme si, ako správne štruktúrovať náš projekt.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 3x (21.55 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Kotlin