Изменение цвета текста в EditText после определенной длины

Рейтинг: 1Ответов: 1Опубликовано: 23.04.2015

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

protected TextWatcher mTextWatcher = new TextWatcher() {
    private long lastPostTypingTime = 0;

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        }


    }

    @Override
    public void afterTextChanged(Editable s) {
        if (s.length() >= TYPING_DURATION) {
            s.setSpan(new ForegroundColorSpan(Color.RED), TYPING_DURATION, s.length(),  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }
};

При неразрывной печати после определенного колич. символов текст нормально меняет цвет на красный, при удалении с конца строки, тоже все проходит нормально. Проблема, когда удаляется допустим часть символов из середины текста, тогда общая длина текста становится < TYPING_DURATION, но текст выделенный красным остается. Как это можно исправить?

Ответы

▲ 2
@Override
public void afterTextChanged(Editable s) {
    for (ForegroundColorSpan span : s.getSpans(0, s.length(), ForegroundColorSpan.class)) {
        s.removeSpan(span);
    }
    if (s.length() >= TYPING_DURATION) {
        s.setSpan(new ForegroundColorSpan(Color.RED), TYPING_DURATION, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
}