我正在尝试制作一个快速的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
此方法调用change
和restoreInvariants
,两者都有这样的循环:
for (int i = 1; i < mSpanCount; i++) {
...
}
对于1000行文件, mSpanCount
通常约为20000,因此这些循环非常昂贵。
有没有办法在不使用SpannableStringBuilder
的情况下在Android中获取彩色文字?我愿意处理涉及Android的C ++方面的低级解决方案,或者要求我将一些东西拼接在一起。