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

问题描述

我有一个 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 基本上为您提供了该类的所有 span 实例,您可以对其进行迭代并使用某些内容进行匹配,在这种情况下,StyleSpan 有一个 style那是一个 ID。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...