gpt4 book ai didi

android - 如何使用 Jetpack Compose 在 TextField 中应用掩码日期(mm/dd/yyyy)?

转载 作者:行者123 更新时间:2023-12-04 23:46:36 26 4
gpt4 key购买 nike

我有一个不能超过 10 个字符的 TextField,并且用户需要以“mm/dd/yyyy”格式输入日期。每当用户键入前 2 个字符时,我会附加“/”,当用户键入接下来的 2 个字符时,我会再次附加“/”。
我做了以下事情来实现这一点:

            var maxCharDate = 10

TextField(
value = query2,
onValueChange = {
if (it.text.length <= maxCharDate) {
if (it.text.length == 2 || it.text.length == 5)
query2 = TextFieldValue(it.text + "/", selection = TextRange(it.text.length+1))
else
query2 = it
}
emailErrorVisible.value = false
},
label = {
Text(
"Date of Birth (mm/dd/yyyy)",
color = colorResource(id = R.color.bright_green),
fontFamily = FontFamily(Font(R.font.poppins_regular)),
fontSize = with(LocalDensity.current) { dimensionResource(id = R.dimen._12ssp).toSp() })
},
.
.
.
它的工作原理是附加的“/”不会在按退格键时被删除,而其他字符会被删除。
如何在按退格键时也删除“/”?

最佳答案

您可以使用 onValueChange 做一些不同的事情。定义最大字符数并使用 visualTransformation 显示您喜欢的格式而不更改 TextField 中的值.

val maxChar = 8
TextField(
singleLine = true,
value = text,
onValueChange = {
if (it.length <= maxChar) text = it
},
visualTransformation = DateTransformation()
)
在哪里:
class DateTransformation() : VisualTransformation {
override fun filter(text: AnnotatedString): TransformedText {
return dateFilter(text)
}
}

fun dateFilter(text: AnnotatedString): TransformedText {

val trimmed = if (text.text.length >= 8) text.text.substring(0..7) else text.text
var out = ""
for (i in trimmed.indices) {
out += trimmed[i]
if (i % 2 == 1 && i < 4) out += "/"
}

val numberOffsetTranslator = object : OffsetMapping {
override fun originalToTransformed(offset: Int): Int {
if (offset <= 1) return offset
if (offset <= 3) return offset +1
if (offset <= 8) return offset +2
return 10
}

override fun transformedToOriginal(offset: Int): Int {
if (offset <=2) return offset
if (offset <=5) return offset -1
if (offset <=10) return offset -2
return 8
}
}

return TransformedText(AnnotatedString(out), numberOffsetTranslator)
}
enter image description here

关于android - 如何使用 Jetpack Compose 在 TextField 中应用掩码日期(mm/dd/yyyy)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68468942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com