You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:37:35