
Я пытаюсь реализовать ModalBottomSheet в Jetpack Compose — Android, где кнопка «Нажмите, чтобы скрыть» всегда видна внизу листа. Эта кнопка должна оставаться видимой и закрепленной внизу независимо от того, развернут ли лист частично или полностью. Содержимое над кнопкой должно быть прокручиваемым, если оно превышает доступное пространство.
Чего я хочу достичь:
- ModalBottomSheet, который поддерживает как частично, так и полностью развернутое состояние.
- Прокручиваемый список элементов внутри листа.
- Кнопка, которая всегда видна внизу листа. (и расширенный)
Код: Выделить всё
PartiallyExpanded
Код: Выделить всё
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
// State to control the visibility of the bottom sheet
var showBottomSheet by remember { mutableStateOf(false) }
// State for the ModalBottomSheet itself
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = false)
val scope = rememberCoroutineScope()
Box(
modifier = modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Button(onClick = { showBottomSheet = true }) {
Text("Show Bottom Sheet")
}
}
if (showBottomSheet) {
ModalBottomSheet(
onDismissRequest = { showBottomSheet = false },
sheetState = sheetState
) {
// Content of the bottom sheet
Column(
modifier = Modifier
.fillMaxHeight()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Column (modifier = Modifier
.weight(1f, fill = false)
.verticalScroll(rememberScrollState())){
for (i in 1..30) {
Text(modifier = Modifier.fillMaxWidth(),text = "Item $i", style = MaterialTheme.typography.headlineMedium)
}
}
Button(
modifier = Modifier.padding(top = 16.dp),
onClick = {
scope.launch { sheetState.hide() }.invokeOnCompletion {
if (!sheetState.isVisible) {
showBottomSheet = false
}
}
}
) {
Text("Click to Hide")
}
}
}
}
}
Как изменить макет, чтобы кнопка всегда была видна в нижней части фрейма ModalBottomSheet, как в состояниях Частично развернутый, так и Развернутый?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ottomsheet
Мобильная версия