我想在Android Jetpack Compose中使用按钮来更改TextField()组件中所选文本的文本样式(如字体大小、颜色、字重等)。
主要问题是,当我更改所选文本的文本样式时,TextField无法保存它,或者当我在TextField中添加/删除一个字母时,TextField会删除先前的文本样式。
换句话说,在重新组合过程发生时,TextField中的文本样式会消失。 我的代码是:
主要问题是,当我更改所选文本的文本样式时,TextField无法保存它,或者当我在TextField中添加/删除一个字母时,TextField会删除先前的文本样式。
换句话说,在重新组合过程发生时,TextField中的文本样式会消失。 我的代码是:
@Composable
fun Show() {
val inputText = remember{ mutableStateOf(TextFieldValue("This is a annotated text text"))}
Column(
modifier = Modifier.fillMaxSize().padding(5.dp) ,
horizontalAlignment = Alignment.CenterHorizontally
) {
//=================== TextField
CustomTextField(textInput = inputText)
//==================== Button
Button(onClick = {
inputText.value = changeSegmentColor(inputText.value)
}) {
Text(text = "Change the text style of selected text")
}
//======================
}
}
@Composable
fun CustomTextField (
textInput:MutableState<TextFieldValue>
) {
TextField(
value = textInput.value , onValueChange = {
textInput.value = it
},
modifier = Modifier.fillMaxWidth().heightIn(min = 200.dp) ,
)
}
private fun changeSegmentColor(textFVal: TextFieldValue):TextFieldValue{
val txtAnnotatedBuilder = AnnotatedString.Builder()
val realStartIndex = textFVal.getTextBeforeSelection(textFVal.text.length).length
val endIndex = realStartIndex + textFVal.getSelectedText().length
txtAnnotatedBuilder.append(textFVal.annotatedString)
val myStyle = SpanStyle(
color = Color.Red ,
fontSize = 16.sp ,
background = Color.Green
)
txtAnnotatedBuilder.addStyle(myStyle ,realStartIndex ,endIndex)
return textFVal.copy(annotatedString = txtAnnotatedBuilder.toAnnotatedString())
}
Text
Composable吗?同时,请提供一个最小可复现示例。 - Richard Onslow Roper