У моего экрана есть поле ввода внизу. При открытии клавиатуры (Android, iOS) она выдвигает вход в верхнюю часть, чтобы она оставалась над клавиатурой. Точнее, так что базовая линия ввода находится над клавиатурой. Он по -прежнему выравнивает базовую линию текста с верхней частью клавиатуры, а прокладка остается на основе клавиатуры. На iOS проблема сохраняется.val imeBottomDp = with(density) { WindowInsets.ime.getBottom(this).toDp() }
val extraGap = if (imeBottomDp > 0.dp) 32.dp else 0.dp
Surface(
modifier = Modifier
.padding(bottom = extraGap),
tonalElevation = 2.dp,
shadowElevation = 1.dp,
color = MaterialTheme.colorScheme.surface
) {
BasicTextField(
value = textState,
onValueChange = { textState = it },
enabled = enabled,
modifier = Modifier
.background(Color.Green)
.padding(vertical = 52.dp, horizontal = 8.dp),
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Text,
imeAction = ImeAction.Send,
),
...
< /code>
Есть идеи? Это должно быть возможно без этих обходных путей? Кажется довольно распространенным, если не ожидалось, оставить некоторое пространство между базовой линией и верхней частью клавиатуры?Surface(
modifier = Modifier
.imePadding()
.padding(bottom = 0.dp),
tonalElevation = 2.dp,
shadowElevation = 1.dp,
color = MaterialTheme.colorScheme.surface
)
< /code>
Но это добавляет много пространства (200.dp+) между входом и верхней частью клавиатуры. < /p>
Изменить 2: < /p>
Я попробовал эту комбинацию: < /p>
val extraGap = if (isAndroid && imeBottomDp > 0.dp) 32.dp else 0.dp
val modifier = if (isIos) Modifier.imePadding() else Modifier
Surface(
modifier = modifier.padding(bottom = extraGap)
...
< /code>
Казалось, изначально работал, но теперь я вижу большой разрыв между вводом и клавиатурой на iOS. Не уверен, что случилось.
Подробнее здесь: https://stackoverflow.com/questions/797 ... f-keyboard