
Náš Android tech stack pro vývoj mobilních aplikací

28. Feb 2023
AndroidBackdrop component se skládá ze dvou vrstev: zadní a přední. Účelem zadní vrstvy je zobrazit kontext. Součástí je appBar. Účelem přední vrstvy je zobrazit obsah na základě kontextu ze zadní vrstvy. Backdrop je implementovaný v Jetpack Compose jako BackdropScaffold composable.
BackdropScaffold má, jak je v Jetpack Compose obvyklé, mnoho parametrů, které lze přizpůsobit, a tři z nich jsou povinné:
@Composable
fun BackdropScaffold(
appBar: @Composable () -> Unit,
backLayerContent: @Composable () -> Unit,
frontLayerContent: @Composable () -> Unit,
modifier: Modifier = Modifier,
scaffoldState: BackdropScaffoldState = rememberBackdropScaffoldState(Concealed),
gesturesEnabled: Boolean = true,
peekHeight: Dp = BackdropScaffoldDefaults.PeekHeight,
headerHeight: Dp = BackdropScaffoldDefaults.HeaderHeight,
persistentAppBar: Boolean = true,
stickyFrontLayer: Boolean = true,
backLayerBackgroundColor: Color = MaterialTheme.colors.primary,
backLayerContentColor: Color = contentColorFor(backLayerBackgroundColor),
frontLayerShape: Shape = BackdropScaffoldDefaults.frontLayerShape,
frontLayerElevation: Dp = BackdropScaffoldDefaults.FrontLayerElevation,
frontLayerBackgroundColor: Color = MaterialTheme.colors.surface,
frontLayerContentColor: Color = contentColorFor(frontLayerBackgroundColor),
frontLayerScrimColor: Color = BackdropScaffoldDefaults.frontLayerScrimColor,
snackbarHost: @Composable (SnackbarHostState) -> Unit = { SnackbarHost(it) }
)
Další parametry jsou volitelné:
Většina z nich je snadno pochopitelná, některé jsou trochu složitější. Příklady si ukážeme na BackdropScaffold, který vypadá takto. Aplikace má appBar s navigační šipkou a názvem. Zadní vrstva se 2 textovými poli a přední vrstva se seznamem koček.
Výška viditelné části zadní vrstvy, když je skrytá. V tomto příkladu je peekHeight nastavena na 100 dp. Zjednodušeně řečeno, pokud je zadní vrstva skrytá, bude vidět 100 dp.
peekHeight = 100.dp
Pokud by se měla přední vrstva přilepit na výšku zadní vrstvy. Předvolená hodnota je true, takže horní část přední vrstvy je přilepena ke spodní části zadní vrstvy. Pokud je nastavena hodnota false a hodnota headerHeight je ponechána na předvolené hodnotě (56 dp), bude viditelných pouze 56 dp přední vrstvy. V příkladu není hodnota headerHeight upravená a hodnota stickyFrontLayer je nastavena na false.
stickyFrontLayer = false
Minimální výška přední vrstvy při nečinnosti. V tomto příkladu je hodnota headerHeight nastavena na 100 dp. stickyFrontLayer je třeba nastavit na hodnotu false, pokud chceme tak malou výšku přední vrstvy, jinak se přední vrstva přilepí na výšku zadní vrstvy.
headerHeight = 100.dp,
stickyFrontLayer = false
Pokud se má po odkrytí zadní vrstvy zobrazit lišta aplikací. V tomto příkladu je počáteční stav zadní vrstvy odkrytý a panel nástrojů není viditelný. Pomocí gesta se stav změní na skrytý, čímž se zobrazí panel aplikací.
persistentAppBar = false
Toto je příklad pozadí bez jakýchkoli úprav. Počínaje odkrytým stavem zadní vrstvy s přetrvávající lištou aplikací a přední vrstvou přiléhající k zadní vrstvě.