键入时出现具有多种样式的 TextField 问题。只有最后一个字符有样式
Issue with TextField with multiple styles when typing. Only last char is styled
在 UI 上选择一个按钮后,我想对输入的文本应用粗体样式
我不明白为什么只有最后一个字符是粗体,而前面的字符都设置为默认样式。
我究竟做错了什么?为什么 TextField 不记得以前加粗的内容?
示例:
我想要的:
这是我想要的文本示例
我得到的:
这是我想要的文本示例t
val textState = remember { mutableStateOf(TextFieldValue()) }
TextField(
value = textState.value,
onValueChange = {
val prevPos = textState.value.selection.start
if (selectedButton1.value) {
val annotatedString = buildAnnotatedString {
append(it.text)
addStyle(
SpanStyle(fontWeight = FontWeight.Bold),
prevPos,
it.text.length
)
}
textState.value = it.copy(annotatedString, it.selection, it.composition)
} else {
textState.value = it
}
},
placeholder = { Text(placeholder, style = textStyle) },
modifier = modifier,
enabled = enabled,
textStyle = textStyle,...
每次计算之前的pos;因此它只是最后一个字符。由于光标移动,新的 TextFileValue 将使旧的 +1。
如果你想通过按下按钮进行选择,你可以使用另一种状态。
var prevPos by remember { mutableStateOf(0) }
在按钮中:
onClick = {
// Before typing:
prevPos = textState.value.selection.start
}
在 UI 上选择一个按钮后,我想对输入的文本应用粗体样式 我不明白为什么只有最后一个字符是粗体,而前面的字符都设置为默认样式。 我究竟做错了什么?为什么 TextField 不记得以前加粗的内容?
示例:
我想要的: 这是我想要的文本示例
我得到的: 这是我想要的文本示例t
val textState = remember { mutableStateOf(TextFieldValue()) }
TextField(
value = textState.value,
onValueChange = {
val prevPos = textState.value.selection.start
if (selectedButton1.value) {
val annotatedString = buildAnnotatedString {
append(it.text)
addStyle(
SpanStyle(fontWeight = FontWeight.Bold),
prevPos,
it.text.length
)
}
textState.value = it.copy(annotatedString, it.selection, it.composition)
} else {
textState.value = it
}
},
placeholder = { Text(placeholder, style = textStyle) },
modifier = modifier,
enabled = enabled,
textStyle = textStyle,...
每次计算之前的pos;因此它只是最后一个字符。由于光标移动,新的 TextFileValue 将使旧的 +1。 如果你想通过按下按钮进行选择,你可以使用另一种状态。
var prevPos by remember { mutableStateOf(0) }
在按钮中:
onClick = {
// Before typing:
prevPos = textState.value.selection.start
}