Jetpack Compose 的 TextField 中的多种颜色
Multiple colors in TextField of Jetpack Compose
是否可以在 Jetpack Compose 的 TextField 中获得不同的颜色?
类似于 Text
与 AnnotatedString
的组合,但 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()
}
是否可以在 Jetpack Compose 的 TextField 中获得不同的颜色?
类似于 Text
与 AnnotatedString
的组合,但 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()
}