1

我有 2 个 SpannableStringBuilder,sbDest 和 sbSrc。

我想将 sbSrc 插入 sbDest:

sbDest.insert(0, sbSrc)

这行得通 - sbDest 以它在插入之前的跨度加上 sbSrc 中存在的跨度结束。

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

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

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

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

谢谢

4

1 回答 1

1

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

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

SpannableStringBuilder ssbSrc = new SpannableStringBuilder(ssbDest.subSequence(start, end));

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

于 2019-01-17T14:05:32.663 回答