Ral*_*kum 17 android-windowmanager android-window android-jetpack android-jetpack-compose
如何滑入键盘?我试过:
val keyboardController: SoftwareKeyboardController? = LocalSoftwareKeyboardController.current
keyboardController?.show()
Run Code Online (Sandbox Code Playgroud)
但这不起作用。我缺少什么?也许一些清单标志?
jor*_*uke 24
要在 Compose 中显示键盘:
val showKeyboard = remember { mutableStateOf(true) }
val focusRequester = remember { FocusRequester() }
val keyboard = LocalSoftwareKeyboardController.current
OutlinedTextField(
modifier = Modifier
.fillMaxWidth()
.focusRequester(focusRequester),
value = value,
textStyle = MaterialTheme.typography.body2,
onValueChange = { onValueChange(it)},
label = { Text(label) }
)
// LaunchedEffect prevents endless focus request
LaunchedEffect(focusRequester) {
if (showKeyboard.equals(true)) {
focusRequester.requestFocus()
delay(100) // Make sure you have delay here
keyboard?.show()
}
}
Run Code Online (Sandbox Code Playgroud)
小智 14
delay不是显示键盘的可靠方法。不显示键盘是因为在大多数情况下窗口尚未获得焦点。解决方案是这样的:
val windowInfo = LocalWindowInfo.current
val focusRequester = remember { FocusRequester() }
TextField(modifier = Modifier.focusRequester(focusRequester)...)
LaunchedEffect(windowInfo) {
snapshotFlow { windowInfo.isWindowFocused }.collect { isWindowFocused ->
if (isWindowFocused) {
focusRequester.requestFocus()
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我目前使用的是 compose BOM 版本2023.05.01。
其他答案对我不起作用。然而,当我从接受的答案中更改 LaunchedEffect 时,我确实设法让它工作。使用以下代码片段,软件键盘将打开,您可以开始在文本字段内键入内容。
val focusRequester = remember { FocusRequester() }
OutlinedTextField(
modifier = Modifier
.fillMaxWidth()
.focusRequester(focusRequester),
value = value,
textStyle = MaterialTheme.typography.body2,
onValueChange = { onValueChange(it)},
label = { Text(label) }
)
LaunchedEffect(focusRequester) {
awaitFrame()
focusRequester.requestFocus()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14734 次 |
| 最近记录: |