Я пытаюсь запрограммировать подсветку синтаксиса для Android. Алгоритм выделения, который работает в отдельном потоке AsyncTask
, сам по себе работает отлично и возвращает SpannableString
со всем необходимым форматированием.
Однако, когда я делаю editText.setText(mySpannableString, BufferType.SPANNABLE)
, чтобы отобразить выделенный текст, EditText
прокручивает назад к началу и выбирает начало текста.
Очевидно, это означает, что пользователь не может продолжать печатать, пока текст обрабатывается подсветкой синтаксиса. Как я могу это остановить? Можно ли как-нибудь обновить текст без прокрутки EditText
? Вот схема кода:
public class SyntaxHighlighter extends Activity {
private EditText textSource;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.editor);
textSource = (EditText) findViewById(R.id.codeSource);
// Syntax Highlighter loaded text
new XMLHighlighter().execute(textSource.getText().toString());
}
// Runs on Asyncronous Task
private class XMLHighlighter extends AsyncTask<String, Void, SpannableString> {
protected SpannableString doInBackground(String... params) {
return XMLProcessor.HighlightXML(params[0]);
}
protected void onPostExecute(SpannableString HighlightedString) {
textSource.setText(HighlightedString, BufferType.SPANNABLE);
}
}
}