Jetpack Compose 的 TextField 中的多种颜色

Multiple colors in TextField of Jetpack Compose

是否可以在 Jetpack Compose 的 TextField 中获得不同的颜色?

类似于 TextAnnotatedString 的组合,但 TextField 不允许 AnnotatedString 作为输入值。

可与颜色组合的普通文本图像

您可以在 TextField.

中使用 VisualTransformation
TextField(
    value = text,
    onValueChange = { text = it },
    visualTransformation = ColorsTransformation()
)

VisualTransformation中您可以使用AnnotatedString来显示多种样式的文本。

类似于:

class ColorsTransformation() : VisualTransformation {
    override fun filter(text: AnnotatedString): TransformedText {
        return TransformedText(
            buildAnnotatedStringWithColors(text.toString()), 
            OffsetMapping.Identity)
    }
}

与:

fun buildAnnotatedStringWithColors(text:String): AnnotatedString{
    val words: List<String> = text.split("\s+".toRegex())// splits by whitespace
    val colors = listOf(Color.Red,Color.Black,Color.Yellow,Color.Blue)
    var count = 0

    val builder = AnnotatedString.Builder()
    for (word in words) {
        builder.withStyle(style = SpanStyle(color = colors[count%4])) {
            append("$word ")
        }
        count ++
    }
    return builder.toAnnotatedString()
}