Comment exclure des caractères spéciaux à partir du clavier Android pour EditText
-
27-10-2019 - |
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.
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 });
}
}