Edittext разрешить только буквы (программно) - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь получить editTextview, который допускает только буквы (строчные и прописные).

Работает с этим кодом:

 edittv.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"));

Проблема в том, что я получаю цифровую клавиатуру, как это:

keyboard example

Чтобы вернуться к нормальной клавиатуре, я нашел этот код:

edittv.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"));
edittv.setInputType(InputType.TYPE_CLASS_TEXT);

Он работает для возврата клавиатуры, но затем все символы снова разрешены, поэтому он отменяет предыдущий код.

Итак, как я могу разрешить только буквы с алфавитной клавиатурой программно.

Ответы [ 2 ]

3 голосов
/ 05 марта 2019

Вы можете использовать этот код ниже:

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))&&!Character.isSpaceChar(source.charAt(i))) {
            return "";
        }
    }
    return null;
}
};
edit.setFilters(new InputFilter[] { filter });
1 голос
/ 05 марта 2019

Здесь вы используете 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 "";
                }
            }
    });
...