我正在尝试将数千个跨度批量添加到EditText
中的SpannableStringBuilder
(通过getText()
获得)。
这比我想要的要慢。分析表明,绝大多数时间都花在DynamicLayout.reflow
上。有没有办法阻止布局重排,直到我完成添加跨度?
要批量文本重排/布局更改,请使用AppCompatMultiAutoCompleteTextView
作为基类,并使用beginBatchEdit()
和endBatchEdit()
将要批处理的代码括起来
即
public class MyEditText extends AppCompatMultiAutoCompleteTextView {
private void batchUpdateSpans() {
try {
beginBatchEdit();
updateSpans();
} finally {
endBatchEdit();
}
}
}
AppCompatMultiAutoCompleteTextView
使用SpannableBuilder
,一个支持批处理的SpannableStringBuilder
子类。