Смещение прокрутки Jetpack Compose LazyColumn прерывается, когда размер содержимого изменяется динамическиAndroid

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

Сообщение Anonymous »

Я создаю экран чата с помощью Jetpack Compose с LazyColumn. Во время загрузки я показываю мерцающий заполнитель большой высоты. Как только поступают реальные данные, контент сжимается, потому что конечные сообщения становятся меньше.
Проблема в том, что если пользователь прокручивает страницу вниз во время загрузки и контент поступает, часть контента обрезается и становится непрокручиваемой. Например, кнопки в нижней части списка частично находятся за пределами экрана, и на них невозможно нажать.
Я пробовал добавлять дополнительные отступы или использовать heightIn, чтобы заставить меньшее представление прокручиваться, но это не масштабируемое решение для экранов разных размеров.

Минимальный воспроизводимый пример

Код: Выделить всё

@Composable
fun ChatPreview() {
var showLargeContent by remember { mutableStateOf(true) }

LaunchedEffect(Unit) {
delay(3000)
showLargeContent = false
}

val context = LocalContext.current

LazyColumn(
modifier = Modifier.fillMaxSize()
) {
if (showLargeContent) {
item {
Button(
modifier = Modifier
.background(Color.Green)
.padding(bottom = 800.dp),
onClick = { Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show() }
) {
Text("Button")
}
}
} else {
item {
Button(
modifier = Modifier
.background(Color.Red)
.padding(bottom = 200.dp),
onClick = { Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show() }
) {
Text("Button")
}
}
}
}
}
Ожидаемое поведение
  • Когда содержимое сжимается, LazyColumn должен автоматически настраиваться так, чтобы все элементы были видимы.
  • Нижняя кнопка должна быть полностью доступна для нажатия без дополнительных отступов.
  • Прокрутка должна оставаться плавной и функциональной даже при переключении с большого содержимого на меньшее.
    />
Что я пробовал
  • Добавление разделителя с большой высотой для принудительной прокрутки.
  • Использование Modifier.heightIn(), чтобы придать меньшему содержимому минимальную высоту.
  • Попытка программной прокрутки с помощью LazyListState.
Ни одно из этих решений не масштабируется и не подходит для экранов разных размеров.

Вопрос
Существует ли чистый, удобный для Compose способ обрабатывать изменение размера LazyColumn, когда содержимое динамически сжимается, пока пользователь находится на границе прокрутки?
Следует ли вручную регулировать положение прокрутки или нет есть ли лучший шаблон для этого в Jetpack Compose?

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

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

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

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

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

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