Android Edittext - Очистка пролетов - PullRequest
18 голосов
/ 23 февраля 2012

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

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

Ответы [ 3 ]

37 голосов
/ 23 апреля 2012

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

toRemoveSpans = et.getSpans(0, et.getText().length(), ForegroundColorSpan.class);
for (int i = 0; i < toRemoveSpans.length; i++) 
    et.removeSpan(toRemoveSpans[i]);
2 голосов
/ 08 ноября 2018
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. Вышеуказанный метод представляет собой простую замену и позволяет легко определить, какие области удаляются.

0 голосов
/ 04 июня 2019

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

код в Котлин

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