Už viac krát som spomínal Composable funkcie a asi ste už pochopili, že sú to všetky funkcie, ktoré sa týkajú
vykresľovania obsahu na obrazovku. Nie je to ich jediná funkcia, dokážu robiť aj iné zázraky, ale tým sa budeme venovať
neskôr.
Composable funkcia sa od klasickej funkcie odlišuje viacerými špecifikami:
@ComposableComposable funkciu môžeš volať výlučne z inej Composable funkcieTakže správny zápis funkcie je:
@Composable
fun MyComposable() {
Text("Hello World")
}
@Composable, nemohli by sme v nej zavolať funkciu Text.fun myComposable()), IDE by nám vypisovalo warningy.@Composable, môže byť volaná iba z inej @Composable funkcie, napríklad vnútri setContent funkcie.Napísaním vlastných Composable funkcií tak vieme naše používateľské rozhranie deliť na menšie celky. Buď to budú
vlastné komponenty, už existujúce, ale predštýlované komponenty, alebo rovno celé obrazovky či iné veľké bloky.
Ak pred Composable funkciu navyše napíšeš anotáciu @Preview označíš túto funkciu ako prezerateľnú z bočného menu.
@Preview
@Composable
fun MyComposable() {
Text("Hello World")
}
Potom môžeš kliknutím na zobrazenie Preview vidieť tvoje obrazovky (možno budeš potrebovať kliknutie na Refresh):

V červenom rámčeku som zvýraznil prepináčik medzi
Preview anotácia nemôžeš aplikovať nad Composable funkciou, ktorá má nedefaultné atribúty. Teda funkcia buď nesmie
mať žiadné atribúty alebo musí mať všetky atribúty nastavené s predvolenou hodnotou. Preview totiž nevie sám od seba
predvyplniť atribúty tvojej Composable funkcie.
Ďalšie vlastnosti Preview anotácie:
@Repeatable, to znamená, že nad jednou Composable funkciou ju môžeš zavolať viackrátTak dokážeš vytvoriť napríklad preview pre viacero veľkostí obrazoviek. Ak by ma zaujímal vzhľad obrazovky na dvoch rôznych obrazovkách, mohol by som použiť takýto kód:
@Preview(heightDp = 320, widthDp = 240)
@Preview(heightDp = 480, widthDp = 360)
@Composable
fun GreetingPreview()
Môžeš si vytvoriť aj vlastnú @Preview anotáciu, ktorá zobrazí viacero preview v jednom okne.
@Retention(AnnotationRetention.BINARY)
@Target(AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.FUNCTION)
@Preview(name = "Light Mode")
@Preview(name = "Dark Mode", uiMode = UI_MODE_NIGHT_YES)
annotation class MyPreview
Preview anotácie:
@MyPreview
@Composable
fun GreetingPreview()
