Проблема синхронизации между ModalBottomSheet и анимацией клавиатуры в Jetpack ComposeAndroid

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

Сообщение Anonymous »

У меня возникла проблема с синхронизацией анимации ModalBottomSheet и анимации программной клавиатуры (IME) в Jetpack Compose, и я был бы признателен за любую информацию или предложения.
Чего я пытаюсь достичь

Я хочу, чтобы 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
}
)
}
}
Мне известно о проблеме, отслеживаемой здесь: https://issuetracker.google.com/issues/293794772, где было предложено альтернативное решение, включающее диалог. Я реализовал собственный нижний лист на основе диалогового окна, и этот подход решил большинство проблем и привел к достаточно плавному функционированию после первого показа клавиатуры, но все еще наблюдается заметная задержка или скачок, особенно при первом появлении клавиатуры в приложении.
Кроме того, я экспериментировал с прослушиванием обратных вызовов анимации клавиатуры (с помощью 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
Ответить

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

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

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

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

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