我的 ID 输入在 99% 的情况下只是数字,因此用户使用数字键盘是最舒服的。然而,有时他们可能需要包含其他字符,因此他们需要能够切换到字符键盘。
撰写 TextField 提供 KeyboardOptions 参数,该参数又具有 KeyboardType。然而,使用 KeyboardType.Number 只提供数字键盘,不允许变化,而且我没有找到任何允许变化的自定义设置。
我这样定义文本字段:
TextField(
value = numberValue,
onValueChange = { numberValue = it },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
label = { Text("Number Keyboard Type") }
)
我建议尝试一下,
@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:
键盘类型会根据输入是数字还是包含其他字符而动态变化。
让我知道这是否适合您。