android Jetpack在TextField元素上编写货币格式

hfyxw5xn  于 2023-01-01  发布在  Android
关注(0)|答案(1)|浏览(82)

我正在尝试为货币的TextField元素给予一些格式。我不想在开始时接受$或€符号。我只想接受以下范围的值。

MIN VALUE: X
MAX VALUE: XXX.XX

我想接受一个.从小数中分离整数。
例如最小一个整数,最大三个整数(0 - 999)
对于小数部分,最多不接受两位数(0.99 - 0.1 - 1)
对于验证,我只想有一个前导零,如果它与十进制数字一起出现,但是如果我输入一个整数,前导零应该被删除。例如:
无法接受这些值:

00.2
0123.30

如何在Android上使用Jetpack Compose实现此功能?

f87krz0w

f87krz0w1#

首先,文本字段的可组合项是androidx.compose.material.TextField。鉴于只允许数字,请选择数字键盘类型,并使用:

keyboardOptions = KeyboardOptions.Default.copy(
                keyboardType = KeyboardType.Number,
            ),

你可以在onValueChange函数闭包中限制错误的输入:

var textState by remember { mutableStateOf("") }
.....
onValueChange = { newText: String ->
            if (newText.isDigitsOnly() &&
 conditionMinValue(newText) &&
 conditionMaxValue(newText) && etc...) {
                textState = newText
            }
        },

但是,不建议在onValueChanged回调中更改可视部件的文本,因为文本状态与进程IME(软件键盘)共享,然后您将不得不使用键盘处理错误。
您需要为可视部件实现自己的可视转换类

visualTransformation = NumberCommaTransformation(),

您可以阅读:https://blog.shreyaspatil.dev/filtering-and-modifying-text-input-in-jetpack-compose-way
标签:How to format number with comma in TextField in compose
再见。

相关问题