
Zvýš atraktivitu svojej aplikácie: Vstavané hry v mobilných aplikáciách (embedded games)

13. Dec 2021
AndroidBottom 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.
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
)
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 = { ... }
)
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 }
)