我正在尝试创建一个可重用的NumberField组件:
@Composable
fun NumberField(
value: Number?,
onNumberChange: (Number) -> Unit,
) {
TextField(
value = value?.toString() ?: "",
onValueChange = {
it.toDoubleOrNull()?.let { value ->
if (value % 1.0 == 0.0) {
onNumberChange(value.toInt())
} else {
onNumberChange(value)
}
}
},
singleLine = true,
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number)
)
}
用作:
@Composable
fun NumberContent() {
val number = remember { mutableStateOf<Number?>(null) }
NumberField(value = number.value) {
number.value = it
}
}
我希望数字根据用户输入的内容为Int或Double类型。上面的代码在输入小数时无法正常工作,例如"5."无法解析为double类型。我想允许用户先输入5.,再继续输入其余内容。因此,我不想自动在小数点后面添加一个零,因为可能并不是他们想要输入的下一个数字。这是最好的方法吗?我知道我可以接受任何文本,然后稍后尝试将其格式化为int或double,并要求用户进行修复,但只需在组件中捆绑所有内容似乎更好。
5.
时,您想要显示什么? - Gabriele Mariotti