Остановить прокрутку EditText при изменении текста (Android) - PullRequest
3 голосов
/ 06 сентября 2011

Я пытаюсь запрограммировать подсветку синтаксиса для 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);
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 03 февраля 2013

В качестве альтернативы существует метод, называемый setTextKeepState(CharSequence text). См. Документы TextView.

1 голос
/ 06 сентября 2011

Я предлагаю следующее:

protected void onPostExecute(SpannableString HighlightedString) {
    int i = textSource.getSelectionStart();
    textSource.setText(HighlightedString, BufferType.SPANNABLE);
    textSource.setSelection(i);
}

, чтобы переместить курсор обратно на свою позицию после изменения содержимого.

...