#java #android #android-edittext #keyboard
#java #Android #android-edittext #клавиатура
Вопрос:
Я пытаюсь получить editTextview, который допускает только буквы (строчные и прописные).
Это работает с этим кодом:
edittv.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"));
Проблема в том, что я получаю цифровую клавиатуру, подобную этой:
Чтобы вернуться к обычной клавиатуре, я нашел этот код:
edittv.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"));
edittv.setInputType(InputType.TYPE_CLASS_TEXT);
Это работает для возврата клавиатуры, но затем все символы снова разрешены, поэтому предыдущий код отменяется.
Итак, как я могу программно разрешить только буквы с алфавитной клавиатурой.
Комментарии:
1. Если я переключу их, то снова будут разрешены только буквы, что хорошо, но я снова получу цифровую клавиатуру.
2. @DaanSeuntjens Я обновил свой ответ, пожалуйста, проверьте..
Ответ №1:
Вы можете использовать этот код ниже:
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i ) {
if (!Character.isLetter(source.charAt(i))amp;amp;!Character.isSpaceChar(source.charAt(i))) {
return "";
}
}
return null;
}
};
edit.setFilters(new InputFilter[] { filter });
Ответ №2:
Здесь вы используете DigitsKeyListener
extends NumberKeyListener
, который допускает только числа, вот почему вы получали эту ошибку.
Вот мое решение для ваших требований, используйте эти строки в вашем XML.
<EditText
android:id="@ id/edt_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "/>
Примечание:- Пробел указывается в конце цифр, чтобы также разрешить пользователю вводить пробел
Для программного :-
edittv.setInputType(InputType.TYPE_CLASS_TEXT);
edittv.setFilters(new InputFilter[]{
new InputFilter() {
public CharSequence filter(CharSequence src, int start,
int end, Spanned dst, int dstart, int dend) {
if (src.equals("")) {
return src;
}
if (src.toString().matches("[a-zA-Z ] ")) {
return src;
}
return "";
}
}
});
Комментарии:
1. Textview создается динамически с использованием кода, поэтому использование xml не является вариантом.
2. Это кажется правильным, но я проверю ответ @bhumilvyas, потому что он был первым с ответом, использующим setFilter. Вместо этого я поддержал вас, потому что это также правильный ответ, надеюсь, вы понимаете.