如何使用 Jetpack Compose 在文本字段中添加国家/地区代码前缀

Spa*_*tta 3 android textfield android-jetpack-compose

我希望我的文本字段以国家代码 (+91) 为前缀,用户无法更改该代码。我如何实现这一目标?

Gab*_*tti 6

您可以使用该visualTransformation属性:

就像是:

TextField(
    value = text,
    onValueChange = { text = it},
    visualTransformation = PrefixTransformation("(+91)")
)
Run Code Online (Sandbox Code Playgroud)

和:

class PrefixTransformation(val prefix: String) : VisualTransformation {    
    override fun filter(text: AnnotatedString): TransformedText {
        return PrefixFilter(text, prefix)
    }
}

fun PrefixFilter(number: AnnotatedString, prefix: String): TransformedText {

    var out = prefix + number.text
    val prefixOffset = prefix.length

    val numberOffsetTranslator = object : OffsetMapping {
        override fun originalToTransformed(offset: Int): Int {
            return offset + prefixOffset
        }

        override fun transformedToOriginal(offset: Int): Int {
            if (offset <= prefixOffset-1) return prefixOffset
            return offset - prefixOffset
        }
    }

    return TransformedText(AnnotatedString(out), numberOffsetTranslator)
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Amr*_*Amr 6

您可以简单地在 textField 内的leadingIcon 参数内添加 Text()

OutlinedTextField(
    value = text,
    onValueChange = onTextChange,
    maxLines = 1,
    leadingIcon =
    {
        Text(
            text = prefixText,
            style = textStyle,
            color = Color.Black,
            modifier = Modifier.padding(start = 24.dp, end = 8.dp)
        )
    }
)
Run Code Online (Sandbox Code Playgroud)