如何在不使用SpannableStringBuilder的情况下在Android中获取彩色文本?

时间:2017-11-24 17:00:55

标签: java android c++ android-ndk spannablestring

我正在尝试制作一个快速的Android代码编辑器。目前,这是我正在采取的方法:

  • 标记源代码
  • 根据令牌的类型为文本范围指定不同的颜色
  • 为每种颜色调用SpannableStringBuilder.setSpan(new ForegroundColorSpan(color))

可以想象,对于大文件(1000行+),我附加了成千上万的跨度。我注意到当我编辑大文件时,当我尝试删除单个字符时,应用会冻结2秒以上。我将其追踪到SpannableStringBuilder.replace在幕后做了很多工作:https://github.com/aosp-mirror/platform_frameworks_base/blob/e72b6f0d3113c84df6d9113609942ef5d9b4e34e/core/java/android/text/SpannableStringBuilder.java

此方法调用changerestoreInvariants,两者都有这样的循环:

for (int i = 1; i < mSpanCount; i++) {
    ...
}
对于1000行文件,

mSpanCount通常约为20000,因此这些循环非常昂贵。

有没有办法在不使用SpannableStringBuilder的情况下在Android中获取彩色文字?我愿意处理涉及Android的C ++方面的低级解决方案,或者要求我将一些东西拼接在一起。

0 个答案:

没有答案