如果目标中已经存在该类型的跨度,则SpannableStringBuilder.insert()不插入跨度

时间:2019-01-17 12:21:44

标签: android android-edittext spannablestringbuilder

我有2个SpannableStringBuilders,sbDest和sbSrc。

我想将sbSrc插入sbDest:

sbDest.insert(0,sbSrc)

可行-并且sbDest以插入之前的跨度加上sbSrc中存在的跨度结束。

但是,如果sbSrc包含sbDest中已经存在的类型的跨度,则不会插入该跨度。

原因似乎是SpannableStringBuilder.java中此注释下的代码:

  

//仅当此对象尚未用作跨度时才添加跨度   字符串

任何人都知道为什么这种行为,以及是否有解决方法?

谢谢

1 个答案:

答案 0 :(得分:0)

回答了我自己的问题...

我首先使用

从sbDest获取sbSrc(以实现复制/粘贴功能)。

SpannableStringBuilder ssbSrc =新的SpannableStringBuilder(ssbDest.subSequence(开始,结束));

subSequence()确实复制了跨度,但没有克隆它们,因此ssbSrc的结束时间与ssbDest中的跨度相同(对象实例,而不仅仅是相同的类型)...这就是为什么sbDest .insert()不会插入它们。