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

Compose TextField在三星Note 10 Lite点击换行键时失焦问题求助

问题:三星Note 10 Lite上TextField点击换行按钮失焦

复现代码

Surface {
    Box(contentAlignment = Alignment.Center,
        modifier = Modifier
            .fillMaxSize()
            .padding(32.dp)) {
        var state by remember { mutableStateOf(TextFieldValue("")) }
        TextField(value = state,
            onValueChange = { state = it },
            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text),
        )
    }
}

问题现象

点击软键盘的换行按钮时,TextField会失去焦点,该问题仅出现在三星Note 10 Lite设备上,其他设备运行正常。

解决方案

1. 明确指定IME动作并拦截默认行为

通过imeAction定义换行按钮的功能,再用keyboardActions处理回调,避免默认的失焦逻辑:

Surface {
    Box(contentAlignment = Alignment.Center,
        modifier = Modifier
            .fillMaxSize()
            .padding(32.dp)) {
        var state by remember { mutableStateOf(TextFieldValue("")) }
        TextField(
            value = state,
            onValueChange = { state = it },
            keyboardOptions = KeyboardOptions(
                keyboardType = KeyboardType.Text,
                imeAction = ImeAction.Next // 根据需求选择Done/Next等
            ),
            keyboardActions = KeyboardActions(
                onNext = { /* 可留空或添加自定义逻辑,阻止默认失焦 */ },
                onDone = { /* 处理完成操作 */ }
            )
        )
    }
}

2. 使用FocusRequester手动保持焦点

通过焦点请求器,在换行时重新让TextField获取焦点:

Surface {
    Box(contentAlignment = Alignment.Center,
        modifier = Modifier
            .fillMaxSize()
            .padding(32.dp)) {
        val focusRequester = remember { FocusRequester() }
        var state by remember { mutableStateOf(TextFieldValue("")) }
        TextField(
            value = state,
            onValueChange = { state = it },
            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text),
            keyboardActions = KeyboardActions(
                onAny = { focusRequester.requestFocus() }
            ),
            modifier = Modifier.focusRequester(focusRequester)
        )
    }
}

原因说明

三星部分机型的默认键盘会将换行操作默认映射为关闭键盘(即触发输入框失焦),属于厂商定制的键盘行为,需要通过代码覆盖默认逻辑来解决。

内容的提问来源于stack exchange,提问作者Jeff Liu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:30:07