Edittext разрешает только буквы (программно)

#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. Вместо этого я поддержал вас, потому что это также правильный ответ, надеюсь, вы понимаете.