Android 如何在Compose中创建Textfield

Android 如何在Compose中创建Textfield,android,android-jetpack-compose,Android,Android Jetpack Compose,我想创建这样的文本字段: 如何操作,文本字段背景?您可以使用文本字段并使用可视化转换属性格式化数字: TextField(value = text, onValueChange = { text = it }, visualTransformation = NumberTransformation() ) 其中,NumberTransformation类似于: class NumberTransformation() : VisualTransformation {

我想创建这样的文本字段:


如何操作,文本字段背景?

您可以使用
文本字段
并使用
可视化转换
属性格式化数字:

TextField(value = text,
    onValueChange = { text = it },
    visualTransformation = NumberTransformation()
)
其中,
NumberTransformation
类似于:

class NumberTransformation() : VisualTransformation {
    override fun filter(text: AnnotatedString): TransformedText {
        return numberFilter(text)
    }
}

fun numberFilter(text: AnnotatedString): TransformedText {

    // +XXX XXX XXX XXX
    val trimmed = if (text.text.length >= 12) text.text.substring(0..11) else text.text
    var out = ""
    for (i in trimmed.indices) {
        if (i==0) out += "+"
        out += trimmed[i]
        if (i % 3 == 2 && i != 11) out += " "
    }

    val numberOffsetTranslator = object : OffsetMapping {
        override fun originalToTransformed(offset: Int): Int {
            if (offset <= 0) return offset
            if (offset <= 2) return offset +1
            if (offset <= 5) return offset +2
            if (offset <= 8) return offset +3
            if (offset <= 12) return offset +4
            return 16
        }

        override fun transformedToOriginal(offset: Int): Int {
            if (offset <=0) return offset
            if (offset <=3) return offset -1
            if (offset <=7) return offset -2
            if (offset <=11) return offset -3
            if (offset <=15) return offset -4
            return 11
        }
    }

    return TransformedText(AnnotatedString(out), numberOffsetTranslator)
}
class NumbertTransformation():VisualTransformation{
覆盖趣味过滤器(文本:AnnotatedString):TransformedText{
返回编号过滤器(文本)
}
}
有趣的数字过滤器(文本:AnnotatedString):TransformedText{
//+XXX XXX XXX XXX
val trimmed=if(text.text.length>=12)text.text.substring(0..11)else text.text
var out=“”
对于(修剪索引中的i){
如果(i==0)输出+=“+”
out+=修剪后的[i]
如果(i%3==2&&i!=11)输出+=“”
}
val NumberOfSetTranslator=对象:偏移映射{
覆盖原始转换(偏移量:Int):Int{

if(offset)我指的是文本字段的背景