Я столкнулся с той же проблемой, и некоторые исследования SO дали мне это решение.Спасибо @ njzk2 за блестящее решение.Разместите его здесь, чтобы другие могли получить ответ.
maxLength
атрибут в EditText
на самом деле InputFilter
, который вы можете написать самостоятельно и получить из кода.
Вы можетепосмотрите на реализацию InputFilter.LengthFilter, которая в основном возвращает null
, если переполнения нет.(см. ссылка )
С небольшой модификацией этого: создайте расширение для InputFilter.LengthFilter
, в котором вы вызываете super
, и сравните его с null
, чтобы решить, нужно ли вамотобразить предупреждение.
editText.setInputFilters(new InputFilter[] {
new InputFilter.LengthFilter(max) {
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
CharSequence res = super.filter(source, start, end, dest, dstart, dend);
if (res != null) { // Overflow
Toast.makeText(this,"OVERFLOW!",Toast.LENGTH_SHORT).show();
}
return res;
}
}
});