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)