对于 Jetpack Compose 文本字段,如何显示数字键盘但仍允许用户切换到字母?

问题描述 投票:0回答:1

我的 ID 输入在 99% 的情况下只是数字,因此用户使用数字键盘是最舒服的。然而,有时他们可能需要包含其他字符,因此他们需要能够切换到字符键盘。

撰写 TextField 提供 KeyboardOptions 参数,该参数又具有 KeyboardType。然而,使用 KeyboardType.Number 只提供数字键盘,不允许变化,而且我没有找到任何允许变化的自定义设置。

我这样定义文本字段:

TextField(
    value = numberValue,
    onValueChange = { numberValue = it },
    keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
    label = { Text("Number Keyboard Type") }
)

我明白了 enter image description here

android input android-jetpack-compose textfield
1个回答
0
投票

我建议尝试一下,

 @Composable
   fun DynamicKeyboardTextField() {
      var numberValue by remember { mutableStateOf("") }
      var isInputNumeric by remember { mutableStateOf(true) }

      TextField(
        value = numberValue,
        onValueChange = { value ->
            // Check if the value entered includes any non-numeric characters
            isInputNumeric = value.all { it.isDigit() }
            numberValue = value
        },
        keyboardOptions = KeyboardOptions(
            keyboardType = if (isInputNumeric) KeyboardType.Number else KeyboardType.Text
        ),
        label = { Text("Number or Text Input") }
    )
}

这里是对上述更改的一些解释,以了解我在上面添加的原因

isInputNumeric:
此状态确定输入是否仅包含数字。最初,它设置为 true,因为您大部分时间都期待数字。

onValueChange:
它更新 numberValue 状态并检查该值是否仅包含数字字符。如果输入任何非数字字符,它会将 isInputNumeric 切换为 false 以允许键盘切换到 KeyboardType.Text。

keyboardOptions:
键盘类型会根据输入是数字还是包含其他字符而动态变化。

让我知道这是否适合您。

© www.soinside.com 2019 - 2024. All rights reserved.