Preskočiť na obsah
Android

Jetpack Compose Basics - Hľadáš alternatívu k menu alebo dialógom? Skús Modal Bottom Sheet

Peter Šuly13. 12. 2021
Jetpack Compose Basics - Hľadáš alternatívu k menu alebo dialógom? Skús Modal Bottom Sheet

Bottom Sheet je komponent používaný ako doplnková plocha ukotvená k spodnej časti obrazovky. Tento článok bude o presnom type Bottom Sheet - Modal Bottom Sheet a o tom, ako ho použiť v Jetpack Compose

Je to alternatíva k menu alebo dialógovým oknám, musí sa zavrieť (buď potiahnutím prstom alebo inou interakciou používateľa), aby ste mohl interagovať s obsahom obrazovky. V Jetpack Compose je bottom sheet implementovaný pomocou composable ModalBottomSheet.

Anatómia bottom sheetu. 1 - bottom sheet content, 2 - row of bottom sheet, 3 - overlaid screen content

Ako vytvoriť Bottom Sheet v Jetpack Compose?

ModalBottomSheet má 3 možné stavy definované prostredníctvom parametra sheetState typu ModalBottomSheetValue. Možné hodnoty sú Hidden, Expanded alebo HalfExpanded. Predvolená hodnota v stave listu je Hidden, vlastný stav si možno zapamätať takto

val sheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden)

Ako je obvyklé ModalBottomSheet v Jetpack Compose má veľa parametrov na prispôsobenie, dva z nich sú 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é parametre

  • sheetContent - composable, obsahujúci obsah z bottom sheetu
  • content - composable, obsahujúci obsah obrazovky za spodným listom. Tento obsah je prekrytý scrimColor, keď je bottom sheet v stave Expanded

Voliteľné parametre

  • sheetState - riadi stav ModalBottomSheet
  • modifier - používa sa na zmeny z caller side
  • sidesheetShape - tvar spodného listu napr. *RoundedCornerShape*(topStart = 24.*dp*, topEnd = 24.*dp*)
  • sheetElevation - výška spodného listu v dpsheetBackgroundColor - farba pozadia spodného listu, predvolene nastavená na povrchovú farbu
  • sheetContentColor - farba obsahu kontrastujúca s farbou pozadia, predvolená hodnota vypočíta sa pomocou contentColorFor funkcie
  • scrimColor – farba prekrytia aplikovaná na obsah, keď je viditeľný bottom sheet
Správanie bottom sheetu

Ako otvoriť ModalBottomSheet kliknutím na tlačidlo?

Pre animovaný prechod ModalBottomSheet sú pripravené funkcie show() a hide(), ktoré možno volať na modalBottomSheetState. Ide o suspend funkciu, pretože na ich použitie je potrebná animácia spustená ako coroutine, scope alebo LaunchedEffect.

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

Ako zakázať stav Half Expanded v ModalBottomSheet?

V niektorých prípadoch stav HalfExpanded nie je žiaduci a našťastie existuje spôsob, ako ho zakázať vrátením hodnoty false v lambda confirmStateChange.

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

Ďalšie články zo série Jetpack Compose Basics:

Späť na články
Zdieľať ďalej
Ozvite sa kedykoľvek

Pripravení rozbehnúť projekt?
Poďme stavať spolu.

Dohodnite si hovor alebo nám napíšte e-mail.

Kontaktujte nás

Neviete, kde začať? Stiahnite si našu šablónu produktového zadania.