web-dev-qa-db-fra.com

Comment créer EditText accepte Alphabets uniquement dans Android?

Comment puis-je entrer uniquement des alphabets dans EditText sous Android?

49
UMAR
EditText state = (EditText) findViewById(R.id.txtState);


                Pattern ps = Pattern.compile("^[a-zA-Z ]+$");
                Matcher ms = ps.matcher(state.getText().toString());
                boolean bs = ms.matches();
                if (bs == false) {
                    if (ErrorMessage.contains("invalid"))
                        ErrorMessage = ErrorMessage + "state,";
                    else
                        ErrorMessage = ErrorMessage + "invalid state,";

                }
21
UMAR

Ajoutez cette ligne avec votre balise EditText.

Android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

Votre balise EditText devrait ressembler à:

<EditText
        Android:id="@+id/editText1"
        Android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" />
143
Sandeep
edittext.setFilters(new InputFilter[] {
    new InputFilter() {
        public CharSequence filter(CharSequence src, int start,
                int end, Spanned dst, int dstart, int dend) {
            if(src.equals("")){ // for backspace
                return src;
            }
            if(src.toString().matches("[a-zA-Z ]+")){
                return src;
            }
            return "";
        }
    }
});

s'il vous plaît tester à fond si!

53
Subhas

Grâce à XML, vous pouvez facilement faire comme type de code suivant en XML (editText) ...

Android:digits="abcdefghijklmnopqrstuvwxyz"

seuls les caractères seront acceptés ...

18
Naveed Ashraf

Pour ceux qui veulent que leur editText n'accepte que les alphabets et les espaces (ni chiffres ni caractères spéciaux), on peut alors utiliser cette InputFilter. Ici, j'ai créé une méthode nommée getEditTextFilter() et écrit le filtre de saisie à l'intérieur.

public static InputFilter getEditTextFilter() {
        return new InputFilter() {

            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

                boolean keepOriginal = true;
                StringBuilder sb = new StringBuilder(end - start);
                for (int i = start; i < end; i++) {
                    char c = source.charAt(i);
                    if (isCharAllowed(c)) // put your condition here
                        sb.append(c);
                    else
                        keepOriginal = false;
                }
                if (keepOriginal)
                    return null;
                else {
                    if (source instanceof Spanned) {
                        SpannableString sp = new SpannableString(sb);
                        TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0);
                        return sp;
                    } else {
                        return sb;
                    }
                }
            }

            private boolean isCharAllowed(char c) {
                Pattern ps = Pattern.compile("^[a-zA-Z ]+$");
                Matcher ms = ps.matcher(String.valueOf(c));
                return ms.matches();
            }
        };
    }

Attachez ce filtre d'entrée à votre editText après l'avoir trouvé, comme ceci:

mEditText.setFilters(new InputFilter[]{getEditTextFilter()});

Le crédit original va à @UMAR qui a donné l’idée de valider en utilisant l’expression régulière et @KamilSeweryn

17
swetabh suman

Mettez le code XML edittext code,

   Android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
5
Najib Puthawala

Autoriser uniquement les alphabets dans EditText Android:

InputFilter letterFilter = new InputFilter() {
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            String filtered = "";
            for (int i = start; i < end; i++) {
                char character = source.charAt(i);
                if (!Character.isWhitespace(character)&&Character.isLetter(character)) {
                    filtered += character;
                }
            }

            return filtered;
        }

    };
editText.setFilters(new InputFilter[]{letterFilter}); 
5
Umar Waqas

Pour les espaces, vous pouvez ajouter un seul espace dans les chiffres. Si vous avez besoin de caractères spéciaux tels que point, virgule, vous pouvez également accéder à cette liste.

Android: digits = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

3
Naveen Kumar M

Essaye ça

<EditText
  Android:id="@+id/EditText1"
  Android:text=""
  Android:inputType="text|textNoSuggestions"
  Android:textSize="18sp"
  Android:layout_width="80dp"
  Android:layout_height="43dp">
</EditText>

Vous pouvez trouver d’autres inputType Ici ..

1

Si quelqu'un le veut toujours, Java regex pour prendre en charge Unicode? est un bon. C’est pour quand vous voulez UNIQUEMENT des lettres (quel que soit l’encodage - japonais, suédois) est un EditText Plus tard, vous pourrez le vérifier en utilisant Matcher et Pattern.compile() 

0
mdzeko