Сделайте кнопку всегда видимой внизу Jetpack Compose ModalBottomSheetAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Сделайте кнопку всегда видимой внизу Jetpack Compose ModalBottomSheet

Сообщение Anonymous »


Изображение

Я пытаюсь реализовать 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")
}
}

}
}
}

Моя текущая реализация с Modifier.fillMaxHeight() и Modifier.weight(1f), похоже, работает неправильно в частично развернутом состоянии. Кнопка не видна, пока я не прокрутлю содержимое до самого конца.
Как изменить макет, чтобы кнопка всегда была видна в нижней части фрейма ModalBottomSheet, как в состояниях Частично развернутый, так и Развернутый?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ottomsheet
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»