Přeskočit na obsah
Android

Jetpack Compose Basics – Hledáte alternativu k menu nebo dialogovým oknům? Vyzkoušejte Modal Bottom Sheet

Peter Šuly28. 2. 2023
Jetpack Compose Basics – Hledáte alternativu k menu nebo dialogovým oknům? Vyzkoušejte Modal Bottom Sheet

Bottom Sheet je komponenta, která se používá jako doplňková plocha ukotvená ke spodní části obrazovky. Tento článek bude o přesném typu Bottom Sheet – Modal Bottom Sheet a o tom, jak ho použít v Jetpack Compose.

Jedná se o alternativu k menu nebo dialogovým oknům, musí se zavřít (přetažením prstem nebo jinou uživatelskou interakcí), abyste mohli interagovat s obsahem obrazovky. V Jetpack Compose je bottom sheet implementovaný pomocí composable ModalBottomSheet.

Anatomie bottom sheetu. 1 – bottom sheet content, 2 – row of bottom sheet, 3 – overlaid screen content

Jak vytvořit Bottom Sheet v Jetpack Compose?

ModalBottomSheet má 3 možné stavy definované prostřednictvím parametru sheetState typu ModalBottomSheetValue. Možné hodnoty jsou Hidden, Expanded nebo HalfExpanded. Předvolená hodnota stavu listu je Hidden, vlastní stav si lze zapamatovat takto

val sheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden)

Jako obvykle má ModalBottomSheet v Jetpack Compose mnoho parametrů k přizpůsobení, přičemž dva z nich jsou povinné.

fun ModalBottomSheetLayout( sheetContent: @Composable ColumnScope.() -> Unit, modifier: Modifier = Modifier, sheetState: ModalBottomSheetState = rememberModalBottomSheetState(Hidden), sheetShape: Shape = MaterialTheme.shapes.large, sheetElevation: Dp = ModalBottomSheetDefaults.Elevation, sheetBackgroundColor: Color = MaterialTheme.colors.surface, sheetContentColor: Color = contentColorFor(sheetBackgroundColor), scrimColor: Color = ModalBottomSheetDefaults.scrimColor, content: @Composable () -> Unit )

Povinné parametry

  • sheetContent – composable s obsahem z bottom sheetu
  • content – composable s obsahem obrazovky za spodním listem. Tento obsah je překrytý scrimColor, když je bottom sheet ve stavu Expanded.

Volitelné parametry

  • sheetState – řídí stav ModalBottomSheet
  • modifier – používá se pro změny z caller side
  • sidesheetShape – tvar spodního listu, např. *RoundedCornerShape* (topStart = 24.*dp*, topEnd = 24.*dp*)
  • sheetElevation – výška bottom sheetu v dp sheetBackgroundColor – barva pozadí spodního listu, v předvolbě nastavená na povrchovou barvu
  • sheetContentColor – barva obsahu kontrastující s barvou pozadí, předvolená hodnota, vypočítá se pomocí funkce contentColorFor
  • scrimColor – barva překryvu aplikovaná na obsah, když je viditelný bottom sheet
Chování bottom sheetu

Jak otevřít ModalBottomSheet kliknutím na tlačítko?

Pro animovaný přechod ModalBottomSheet jsou k dispozici funkce show() a hide(), které je možné vyvolat na modalBottomSheetState. Jedná se o funkci suspend, protože k jejich použití je nutná animace spuštěná jako coroutine, scope nebo LaunchedEffect.

val sheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden) Button( onClick = { scope.launch { // Important part sheetState.show() } }, content = { ... } )

Jak zakázat stav Half Expanded v ModalBottomSheet?

V některých případech není stav HalfExpanded žádoucí a naštěstí existuje způsob, jak ho zakázat vrácením hodnoty false v lambda confirmStateChange.

val sheetState = rememberModalBottomSheetState( initialValue = ModalBottomSheetValue.Hidden, confirmStateChange = { it != ModalBottomSheetValue.HalfExpanded } )

Další články ze série Jetpack Compose Basics:

Zpět na články
Sdílet dál
Ozvěte se kdykoli

Připraveni rozjet projekt?
Pojďme stavět spolu.

Domluvte si hovor nebo nám napište e-mail.

Kontaktujte nás

Nevíte, kde začít? Stáhněte si naši šablonu produktového zadání.