如何检查 CharSequence 是否包含某种样式的跨度?

How to check if CharSequence contains a span of certain style?

我有一个 editText,需要检查所选文本是否属于某种样式。例如:

fun isOfStyle(text: CharSequence, charStyle: StyleSpan){
...
}

fun doStuff(){
   if isOfStyle(selectedText(), StyleSpan(Typeface.BOLD)){
      ...
   }
}

检查这个的正确方法是什么?

首先你必须迭代一个spannable,所以把你的文本作为一个spannable

val spannableString = editText.text.toString() as? SpannableStringBuilder

如果您的文本不可转换,则意味着尚未设置跨度,因此您可能还想验证 null

fun isOfStyle(spannable: Spannable, charStyle: StyleSpan){
    spannable.getSpans(0, spannable.length, StyleSpan::class.java).filter {
        it.style == charStyle.style
    }
    //do something with your finding

}

所以 getSpans 基本上让你得到 class 的所有跨度实例,你可以迭代它并使用一些东西来匹配,在这种情况下 StyleSpan 有一个 style 是一个 id。