我遇到了一个 TextField 被键盘遮挡的问题。我在这里找到了类似问题的答案(链接),但是它们对我的情况没有帮助。我有一个 LazyColumn,在其中列出了不同的组合,当窗口中的元素不足以激活滚动时,聚焦于 TextField 不能将其上移至键盘之上。键盘只会将其隐藏。
val listState = rememberLazyListState()
typealias ComposableType = @Composable (Int) -> Unit
val uiList = listOf<ComposableType>( {IconButton}, {Text}, {CustomTextField(listState,it)}, {CustomTextField(listState,it)})
LazyColumn() {
itemsIndexed(uiList) { index, ui ->
ui.invoke(index)
}
}
val scope = rememberCoroutineScope()
@Composable
CustomTextField(scrollState: LazyListState, position: Int) {
OutlinedTextField(
modifier = Modifier.onFocusEvent { focusState ->
if (focusState.isFocused) {
scope.launch {
scrollState.animateScrollToItem(position)
}
}
)
}
比如说,如果我的 uiList 中有 10 个 CustomTextFields,当其中一个 TextField 被聚焦时,滚动就会生效。但是当 uiList 中只有 2 个 TextFields 时,聚焦在它们中的任何一个并不会使它们上移。
我也尝试过使用 RelocationRequester() 并且使用带有滚动条的 Column 替换了 LazyColumn,但都没有起作用。