我正在一个类似 wiki 的解析器中工作,它为一组标记 token 创建跨度。它正在工作,但在 token 迭代器内,我经常需要将 SpannableStringBuilder
上的部分结果转换为 SpannableString
。这被频繁调用,因此我正在寻找最有效的解决方案,并避免创建额外的对象。
目前我正在使用;
SpannableStringBuilder stuff=complex_routine_that_builds_it();
SpannableString result=SpannableString.valueOf(stuff);
然而,这个 valueOf
调用在内部从头开始构建一个 SpannableString
类型,执行 toString
和一个循环来复制分配的 span
.
正如 SpannableStringBuilder
名称所暗示的那样,我认为也许有一种更快的方法可以从构建器获取 SpannableString
。这是真的吗?
最佳答案
当您可以像在 TextView
中一样直接使用 SpannableString
时,无需将 SpannableStringBuilder
转换为 SpannableString
:
SpannableStringBuilder stuff = complex_routine_that_builds_it();
textView.setText(stuff);
正如问题已经表明的那样,如果绝对必要,您可以进行转换
SpannableStringBuilder stuff = complex_routine_that_builds_it();
SpannableString result = SpannableString.valueOf(stuff);
但是您应该考虑为什么您甚至需要进行这种转换?只需使用原始的SpannableStringBuilder
即可。
SpannableString
与 SpannableStringBuilder
这两者之间的区别类似于String
和StringBuilder
之间的区别。 String
是不可变的,但您可以更改 StringBuilder
中的文本。
同样,SpannableString
中的文本是不可变的,而 SpannableStringBuilder
中的文本是可变的。但值得注意的是,这仅适用于文本。它们的跨度(甚至是 SpannableString
)都可以更改。
相关
关于android - 从 SpannableStringBuilder 获取 SpannableString 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23180107/