Я создаю приложение, которому требуются такие функции форматирования текста, как выделение выделенного текста жирным шрифтом, Itali c, перечеркнутый, подчеркивание и т. Д. c. Я использовал StyleSpan (Typeface.BOLD), StyleSpan (Typeface.Itali c), UnderlineSpan (), StrikethroughSpan (), предоставленные android. Все это работает нормально. Но, когда я пытаюсь применить новый диапазон к предыдущему диапазону, ранее примененный диапазон удаляется, а новый применяется. Вот функция, которую я использую для применения формата на основе нажатия кнопки:
fun formatText(typefaceCode: StyleSpan = StyleSpan(Typeface.BOLD), isUnderline : Boolean = false, isStrikeThrough : Boolean = false, isQuote : Boolean = false){
val selectionStart: Int = mEditTextNoteContent.selectionStart
val selectionEnd: Int = mEditTextNoteContent.selectionEnd
val selectedText: String = mEditTextNoteContent.text.toString().substring(selectionStart, selectionEnd)
val formattedString = SpannableStringBuilder(selectedText)
when {
isUnderline -> formattedString.setSpan(UnderlineSpan(), 0, selectedText.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
isStrikeThrough -> formattedString.setSpan(StrikethroughSpan(), 0, selectedText.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
isQuote -> mEditTextNoteContent.text.replace(selectionStart, selectionEnd, "\"" + selectedText + "\"")
else -> formattedString.setSpan(typefaceCode, 0, selectedText.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
}
if(!isQuote)
mEditTextNoteContent.text.replace(selectionStart, selectionEnd, formattedString)
}
Первоначально у меня было следующее форматирование Затем я выделил весь текст и применил Bold. Он должен был показать все жирным шрифтом вместе с Strike Through из предыдущего форматирования, но этого не произошло. Вот что происходит: