Android 如果目标中已存在该类型的span,则SpannableStringBuilder.insert()不会插入span

Android 如果目标中已存在该类型的span,则SpannableStringBuilder.insert()不会插入span,android,android-edittext,spannablestringbuilder,Android,Android Edittext,Spannablestringbuilder,我有两个Spannabestringbuilders,sbDest和sbSrc 我想将sbSrc插入sbDest: sbDest.insert(0,sbSrc) 这就行了——sbDest最终得到了插入之前的跨度加上sbSrc中存在的跨度 但是,如果sbSrc包含sbDest中已存在的类型的范围,则不会插入该范围 原因似乎是SpannableStringBuilder.java中此注释下的代码: //仅当此对象尚未用作此对象中的跨距时,才添加跨距 串 有人知道这种行为的原因,以及是否有解决办法吗

我有两个Spannabestringbuilders,sbDest和sbSrc

我想将sbSrc插入sbDest:

sbDest.insert(0,sbSrc)

这就行了——sbDest最终得到了插入之前的跨度加上sbSrc中存在的跨度

但是,如果sbSrc包含sbDest中已存在的类型的范围,则不会插入该范围

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

//仅当此对象尚未用作此对象中的跨距时,才添加跨距 串

有人知道这种行为的原因,以及是否有解决办法吗


谢谢你回答了我自己的问题

首先,我使用从sbDest获取sbSrc(以实现复制/粘贴功能)

SpannableStringBuilder ssbSrc=新的SpannableStringBuilder(ssbDest.子序列(开始、结束))

subSequence()确实复制了跨距,但没有克隆跨距,因此ssbSrc的跨距与ssbDest中的跨距相同(相同的对象实例,而不仅仅是相同的类型),这就是为什么sbDest.insert()不插入跨距的原因