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

标签 android textfield android-jetpack-compose

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

最佳答案

您可以使用 visualTransformation 属性(property):
就像是:

TextField(
    value = text,
    onValueChange = { text = it},
    visualTransformation = PrefixTransformation("(+91)")
)
和:
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)
}
enter image description here

关于android - 如何使用 Jetpack Compose 在文本字段中添加国家代码前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67735208/

相关文章:

android - Cordova /一般 : Easiest way to develop for different screen layouts?

Android Firebase 数据库事务

ios - 如何为初学者本地化 iOS 中的标签字符串?

android - 如何在 Jetpack Compose 中使用图像占位符进行预览

android - 撰写中的主题相关资源

android - 带有多个文本的按钮

java - 将焦点设置到输入文本字段

regex - Flutter TextField inputFormatters 无法使用我的自定义正则表达式

android - 如何在 Jetpack Compose 中实现这种布局

大约 2012 年的 Android 支付平台选项