Question

Salut, je veux montrer que des chiffres et des caractères sur le clavier pour EditText dans Android, j'ai essayé d'ajouter le android:inputType = text|number d'attribut, mais cela n'a pas fonctionné.

S'il vous plaît aidez-moi à toute autre suggestion mieux. merci d'avance.

Était-ce utile?

La solution

essayez d'ajouter le paramètre chiffres à votre editText:

android:digits="abcde.....012345789"

Autres conseils

utiliser le filtre pour cela. Ici, je suis en ajoutant le code pour le filtre.

EditText etName = (EditText)findViewById(R.id.etName);
InputFilter filter = new InputFilter() { 
            @Override
            public CharSequence filter(CharSequence source, int start, int end, 
                            Spanned dest, int dstart, int dend) { 
                    for (int i = start; i < end; i++) { 
                            if (!Character.isLetterOrDigit(source.charAt(i))) { 
                                    return ""; 
                            } 
                    } 
                    return null; 
            }
};
etName.setFilters(new InputFilter[]{filter}); 

Si vous voulez ajouter des espaces, vous pouvez donner de l'espace après le dernier chiffre.

 android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 "

La solution InputFilter fournie ici est pas 100% correctes, il remplacera et jeter quelques caractères valides de l'entrée si elles sont juste à côté de l'un invalide.

Par exemple nous avons besoin de filtrer tous les caractères spéciaux et que vous entrez du texte: Olala [

Le champ EditText passera toute la phrase olala[ au filtre et la valeur de retour sera « » ce qui signifie que nous jetons valide Olala ainsi.

Voici ma solution:

        InputFilter filter = (source, start, end, dest, dstart, dend)->{
        for (int i = start; i < end; i++) {
            char symbol = source.charAt(i);
            if (!isValidCharacter(symbol)) {
                StringBuilder buf = new StringBuilder();
                for(int j = start; j < end; j++)
                {
                    symbol = source.charAt(j);
                    if(isValidCharacter(symbol)) buf.append(symbol);
                }
                return buf.toString();
            }
        }
        return null;
    };

Nous avons besoin de double boucle ici pour éviter l'allocation de mémoire de StringBuilder pour chaque appel de méthode avec des caractères valides.

  //大兄弟,这么做就可以了。 
  InputFilter filter = new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {
            for (int i = start; i < end; i++) {
                if (isChineseChar(source.charAt(i))) {
                    return "";
                }
            }
            return null;
        }
    };
    etName.setFilters(new InputFilter[]{filter});

//一条简单的规则。
private static boolean isChineseChar(char c) {
    Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
    return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS;
}

La solution est prévue pour limiter l'utilisateur d'entrer des caractères spéciaux à partir du clavier.

La solution ci-dessous utilise RegX mais ajoute au fichier strings.xml de sorte que seront pris en charge au moment de la création xmls multilingues.

strings.xml

<string name="alpha_numeric_regx">[a-zA-Z 0-9]+</string>

fichier source

 //Extracting forehand to avoid multiple calls to getString from Filter
        String alphaNumericRegX = getString(R.string.alpha_numeric_regx);
        mEditTextOtp.setFilters(new InputFilter[]{(source, start, end, dest, dStart, dEnd) -> {
            for (int i = 0; i < source.length(); i++) {
                if (source.equals("")) {
                    return source;
                }
                if (source.toString().matches(alphaNumericRegX)) {
                    return source;
                }
                return "";
            }
            return null;
        }});

Espérons que cela va résoudre le prob. pour les nouveaux gars. :)

Son travail Limiter symbole spécial dans EditText

    private EditText your_editText ;
    private String blockCharacters = "(~*#^|$%&!";

    private InputFilter filter = new InputFilter() {

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

            if (source != null && blockCharacters.contains(("" + source))) {
                return "";
            }
            return null;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        your_editText = (EditText) findViewById(R.id.your_editText);
        your_editText .setFilters(new InputFilter[] { filter });
    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top