SpannableStringBuilder

SpannableStringBuilder

我正在一个类似Wiki的解析器中工作,该解析器为一组标记 token 创建跨度。它正在工作,但是在 token 迭代器内部,我经常需要将SpannableStringBuilder上的部分结果转换为SpannableString。这经常被称为,所以我追求最有效的解决方案,并且避免创建额外的对象。

目前我正在使用;

SpannableStringBuilder stuff=complex_routine_that_builds_it();
SpannableString result=SpannableString.valueOf(stuff);

但是,此valueOf调用在内部从头开始构建SpannableString类型,进行toString和循环以复制分配的spans

就像SpannableStringBuilder的名字所暗示的那样,我认为也许有一种更快的方法可以从生成器中获取SpannableString。是真的吗

最佳答案

当您可以直接使用SpannableStringBuilder时,无需将SpannableString转换为TextView,就像在SpannableStringBuilder中一样:

SpannableStringBuilder stuff = complex_routine_that_builds_it();
textView.setText(stuff);
正如已经显示的问题,如果您绝对必须通过以下方式进行转换
SpannableStringBuilder stuff = complex_routine_that_builds_it();
SpannableString result = SpannableString.valueOf(stuff);
但您应该考虑为什么还要进行这种转换?只需使用原始的SpannableString即可。
SpannableStringBuilder String
两者之间的区别类似于StringBuilderString之间的区别。 StringBuilder是不可变的,但是您可以更改SpannableString中的文本。
类似地,SpannableStringBuilder中的文本是不可变的,而SpannableString中的文本是可变的。不过,重要的是要注意,这仅适用于文本。两者的跨度(甚至是ojit_code)都可以更改。
相关的
  • Android Spanned, SpannedString, Spannable, SpannableString and CharSequence
  • 10-08 12:38