Чего я пытаюсь достичь
Я хочу, чтобы ModalBottomSheet сдвигался вверх одновременно с появлением клавиатуры, когда я запрашиваю фокус на текстовом поле внутри лист. В идеале эти две анимации должны выглядеть как одна интегрированная анимация.
Что я пробовал
Когда появляется ModalBottomSheet, я немедленно запрашиваю фокус на TextField, что вызывает открытие клавиатуры. Однако во время анимации скольжения клавиатура закрывает нижний лист — обе анимации выполняются независимо и асинхронно.
Я также пытался отложить запрос фокуса до полного раскрытия нижнего листа, но этот подход кажется медленным и ухудшает взаимодействие с пользователем.
Пример кода, показывающий один из неработающих подходов:
Код: Выделить всё
if (state.modalVisible) {
ModalBottomSheet(
onDismissRequest = {
onViewAction(ShowOrDismissModal(false))
},
dragHandle = null,
containerColor = MaterialTheme.colorScheme.background,
shape = Shape.BottomSheetCorners
) {
TextField(
modifier = Modifier
.focusRequester(focusRequester)
.onGloballyPositioned {
focusRequester.requestFocus()
}
.padding(MaterialTheme.dimension.margin_medium),
value = textFieldValue,
onValueChange = { newValue ->
textFieldValue = newValue
}
)
}
}
Кроме того, я экспериментировал с прослушиванием обратных вызовов анимации клавиатуры (с помощью WindowInsetsAnimationCompat) и отслеживанием interpolatedFraction для синхронизации смещения нижнего листа прогресс анимации клавиатуры, следуя рекомендациям официальной документации по анимации клавиатуры: https://developer.android.com/develop/u ... w-keyboard. К сожалению, это также не привело к удовлетворительному результату.
Проблему можно увидеть на гифке: https://gifyu.com/image/b34Rk
И вот как я бы хотел, чтобы она работала (здесь подход имел много других проблем, поэтому это не решение): https://gifyu.com/image/b34Rv
Кто-нибудь сталкивался с подобной проблемой или знает какие-нибудь хитрости справиться с этой проблемой?
Подробнее здесь: https://stackoverflow.com/questions/798 ... in-jetpack
Мобильная версия