Ant*_*ini 14 android-jetpack android-jetpack-compose android-compose-textfield android-jetpack-compose-list
我有一个隐藏在键盘下的 TextField 问题,我在这里找到了类似问题的答案,但它们对我的情况没有帮助。我有一个 LazyColumn,其中包含不同可组合项的列表,当窗口中没有足够的元素来激活滚动时,专注于 TextField 不会将聚焦的 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)
}
}
)
}
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果我的 uiList 中有 10 个 CustomTextField,则当其中一个 TextField 获得焦点时,滚动就会起作用。但是,当 uiList 中只有 2 个 TextField 时,关注其中任何一个都不会将它们提升到键盘上方。
我还尝试使用 RelocationRequester() 并使用带有滚动的 Column 而不是 LazyColumn,但没有任何帮助。
ngl*_*ber 20
这是多种事物的结合...
android:windowSoftInputMode="adjustResize"
Run Code Online (Sandbox Code Playgroud)
BringIntoViewRequester
修饰符TextField
。.bringIntoViewRequester(yourBringIntoViewRequester)
Run Code Online (Sandbox Code Playgroud)
FocusRequester
)时,上述步骤对我有用。但是,当用户点击 TextField 时,它对我不起作用。因此,我实施了一个解决方法(我对此并不十分自豪):当TextField
获得焦点时,我稍等一下即可使用RelocationRequester
. 所以我将此修饰符添加到我的TextField
..onFocusEvent {
if (it.isFocused) {
coroutineScope.launch {
delay(200)
yourBringIntoViewRequester.bringIntoView()
}
}
}
Run Code Online (Sandbox Code Playgroud)
这三件事对我有用。
小智 6
将其添加到清单文件中的活动中
android:windowSoftInputMode="adjustResize"
Run Code Online (Sandbox Code Playgroud)
并在该列中例如使用:
Column (horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.navigationBarsPadding().imePadding()
.verticalScroll(rememberScrollState())
.fillMaxHeight()
.padding(top = 20.dp))
Run Code Online (Sandbox Code Playgroud)
为我工作,快乐编码..
归档时间: |
|
查看次数: |
8822 次 |
最近记录: |