我正在制作一个需要文本格式功能的应用程序,例如将所选文本设为粗体、斜体、删除线、下划线等。我使用了 StyleSpan(Typeface.BOLD)、StyleSpan(Typeface.Italic)、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)
}
最初,我有以下格式 然后,我选择了整个文本并应用了粗体。它应该将所有内容与以前格式中的删除线一起显示为粗体,但它没有发生。这是正在发生的事情: