Jetpack Compose中BasicTextField点击Done后onKeyboardAction未触发问题
Jetpack Compose中BasicTextField的Done按钮点击无响应问题解决
你代码里的onKeyboardAction用法错误,导致Done按钮点击时没有触发预期逻辑。onKeyboardAction参数是一个(KeyboardAction) -> Unit的Lambda,需要直接在Lambda内处理键盘动作,而非返回KeyboardActions对象。
修正步骤
- 在Composable中通过
LocalSoftwareKeyboardController.current获取软键盘控制器,用于隐藏键盘。 - 调整
onKeyboardAction的实现逻辑,直接判断触发的键盘动作类型并执行对应操作。
修正后的完整代码
@Composable fun NumberInputTextField() { val keyboardController = LocalSoftwareKeyboardController.current BasicTextField( modifier = Modifier, textStyle = TextStyle( textAlign = TextAlign.End, fontSize = 16.sp, color = Color.DarkGray ), inputTransformation = InputTransformation.maxLength(3), enabled = true, state = rememberTextFieldState(), keyboardOptions = KeyboardOptions( imeAction = ImeAction.Done, keyboardType = KeyboardType.Number ), lineLimits = TextFieldLineLimits.SingleLine, onKeyboardAction = { action -> if (action == KeyboardAction.Done) { Log.d("bbbrand", "onDone") keyboardController?.hide() } } ) }
关键说明
onKeyboardAction的Lambda参数action会传入当前触发的键盘动作,通过判断action == KeyboardAction.Done即可精准处理Done按钮的点击事件。LocalSoftwareKeyboardController是Compose内置的软键盘控制API,必须在Composable函数内部获取才能正常工作。
内容的提问来源于stack exchange,提问作者F.Mysir
相关产品推荐
相关产品推荐

