Jetpack Compose:OutlinedTextField获焦点后软键盘不弹出问题
问题解决:Jetpack Compose OutlinedTextField获焦点但不唤起键盘(API≥33/SDK35)
问题现象
编程触发OutlinedTextField获取焦点时(调用FocusRequester.requestFocus()或通过光标键移动焦点),输入框仅显示已聚焦状态,但软件键盘始终不弹出;仅手动点击输入区域才能正常唤起键盘。此前的延迟200ms等临时方案在API≥33、SDK35环境下均无效。
问题根源
代码中给OutlinedTextField额外添加了.focusable()修饰符:
.focusable(), // <== 问题所在
OutlinedTextField作为输入组件,内部已实现完整的可聚焦逻辑,包含唤起键盘的触发机制。手动添加.focusable()会覆盖组件默认的聚焦行为,导致系统无法识别这是需要唤起键盘的输入焦点事件。
解决方案
直接移除.focusable()修饰符,保留focusRequester和onFocusChanged即可。修改后的OutlinedTextField代码如下:
OutlinedTextField( modifier = Modifier .focusRequester(myFocusRequester) .onFocusChanged { color = if (it.isFocused) Red else Green }, value = myText, onValueChange = { myText = it }, )
修改后,调用myFocusRequester.requestFocus()或通过光标键移动焦点时,输入框会正常获取焦点并自动唤起软件键盘,无需额外延迟或复杂逻辑。
验证说明
移除.focusable()后,组件会使用自身默认的聚焦处理逻辑,该逻辑在API33+、SDK35环境下完全兼容,能够正确触发系统的键盘唤起事件,同时保留焦点状态监听功能。
内容的提问来源于stack exchange,提问作者18446744073709551615
相关产品推荐
相关产品推荐

