Это - то, как я создал фильтр для Поля имени в тексте Редактирования. (Первой буквой являются ЗАГЛАВНЫЕ БУКВЫ, и предоставьте только одиночное пространство после каждого слова.
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)});
}
Если вы подкласс 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)