Android Edittext - интервалы очистки

Я пытаюсь получить EditText, чтобы очистить его промежутки, вызывая EditText.getText().clearSpans(). Однако, если я назову этот метод, EditText начнет вести себя странно, при этом строки, появляющиеся в виде ящиков, и любые промежутки времени, которые я установил, находятся в совершенно неправильном месте.

Итак, мой вопрос: как мне очистить промежутки от и EditText? (Без вызова setText() - текст может составлять тысячи строк и его слишком медленно, чтобы его часто перерисовывать)

Большое спасибо!

Ответы

Ответ 1

Была та же проблема. Решил его, удалив только те типы пролетов, которые я добавил в EditText. Я думаю, clearSpans удаляет больше, чем нужно. Я сделал что-то подобное для каждого типа используемого диапазона:

toRemoveSpans = et.getSpans(0, et.getText().length(), ForegroundColorSpan.class);
for (int i = 0; i < toRemoveSpans.length; i++) 
    et.removeSpan(toRemoveSpans[i]);

Ответ 2

private void clearSpans(@NonNull final Editable editable) {
    final Object[] spans = editable.getSpans(0, editable.length(), Object.class);
    for (final Object span : spans) {
        if (span instanceof ForegroundColorSpan || span instanceof SpannableTextView.CustomTypefaceSpan) {
            editable.removeSpan(span);
        }
    }
}

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

Ответ 3

лучший ответ будет таким, который "s" - это строка, которую вы хотите показать вместо span, или это может быть пустая строка.

код есть в котлине

editText.setText(s)
editText.setSelection(editText.text.length)