#android #textfield #android-jetpack-compose
Вопрос:
Я хочу применить полужирный стиль к тексту, который я печатаю, после выбора кнопки в моем пользовательском интерфейсе я не понимаю, почему только последний символ выделен жирным шрифтом, а все предыдущие имеют стиль по умолчанию. Что я делаю не так? Почему текстовое поле не помнит, что было выделено полужирным шрифтом ранее?
Пример:
Что я хочу: Вот пример текста, который я хочу
Что я получаю: Вот пример textI wan 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,...
Ответ №1:
Предыдущий pos вычисляется каждый раз; таким образом, это всего лишь последний символ. Новое значение TextFileValue будет иметь старое значение 1, так как курсор переместился. если вы хотите выбрать из нажатия кнопки, вы можете использовать другое состояние.
var prevPos by remember { mutableStateOf(0) }
В кнопке:
onClick = { // Before typing: prevPos = textState.value.selection.start }
Комментарии:
1. не могли бы вы, пожалуйста, сказать мне, где инициализировать этот предварительный просмотр? Я добавил его над текстовым полем, но теперь весь текст, который я печатаю, выделен жирным шрифтом. Даже предыдущее, которое не следует выделять жирным шрифтом.
2. кроме того, что делать, если я хочу, чтобы текст был выделен жирным шрифтом в нескольких частях текста?
3. см.раздел Редактирование для начала, для нескольких частей, которые вам нужно сохранить, начальная и конечная позиции в тексте должны быть выделены жирным шрифтом. И передайте его нескольким стилям добавления
4. не могли бы вы привести мне небольшой пример того, как также сохранить конечную позицию и в то же время применить жирный стиль? Пожалуйста? Тнх
5. Варианты: а) Другой класс с начальным и конечным индексом; или б) закодируйте его в текстовой строке, например » lt;bgt;» в начале полужирным шрифтом и «lt;bgt;lt;/bgt; » в конце. Эта информация может быть проанализирована внутри конструктора аннотаций.