Как я использую InputFilter для ограничения символов в EditText в Android?

167
задан Tim Wayne 28 July 2010 в 00:49
поделиться

2 ответа

Это - то, как я создал фильтр для Поля имени в тексте Редактирования. (Первой буквой являются ЗАГЛАВНЫЕ БУКВЫ, и предоставьте только одиночное пространство после каждого слова.

public void setNameFilter() {
    InputFilter filter = new InputFilter() {
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {
            for (int i = start; i < end; i++) {
                if (dend == 0) {
                    if (Character.isSpaceChar(source.charAt(i)) ||
                            !Character.isAlphabetic(source.charAt(i))) {
                        return Constants.Delimiter.BLANK;
                    } else {
                        return String.valueOf(source.charAt(i)).toUpperCase();
                    }
                } else if (Character.isSpaceChar(source.charAt(i)) &&
                        String.valueOf(dest).endsWith(Constants.Delimiter.ONE_SPACE)) {
                    return Constants.Delimiter.BLANK;
                } else if ((!Character.isSpaceChar(source.charAt(i)) &&
                        !Character.isAlphabetic(source.charAt(i)))) {
                    return Constants.Delimiter.BLANK;
                }
            }
            return null;
        }
    };
    editText.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(Constants.Length.NAME_LENGTH)});
}
0
ответ дан 23 November 2019 в 20:56
поделиться

Если вы подкласс InputFilter, вы можете создать свой собственный InputFilter, который будет отфильтровывать любые небуквенно-цифровые символы.

Интерфейс InputFilter имеет один метод, filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend), и он предоставляет вам всю необходимую информацию о том, какие символы были введены в EditText, которому он назначен.

Создав свой собственный InputFilter, вы можете назначить его EditText, вызвав setFilters(...).

http://developer.android.com/reference/android/text/InputFilter.html#filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int)

1
ответ дан 23 November 2019 в 20:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: