Je dois faire un EditText
qui n'accepterait qu'un caractère et un seul caractère (lettre/alpha). Et si l'utilisateur entre un autre caractère, il devrait remplacer celui existant (comme la méthode d'écrasement de la saisie de texte avec 1 symbole autorisé).Permettre seulement 1 caractère dans EditText et toujours remplacer lorsque l'utilisateur l'entrée
Je sais comment définir la longueur maximale du texte dans les propriétés. Mais si je le mets à 1, aucun autre caractère ne peut être inséré avant que l'utilisateur n'en supprime un existant. Mais je veux remplacer char existant avec ce nouveau entré automatiquement sans suppression manuelle. Comment faire ça?
Je sais comment définir la propriété pour autoriser uniquement les chiffres dans un
EditText
, mais I ne peut pas comprendre comment autoriser uniquement les caractères. Donc, la deuxième question est de savoir comment autoriser uniquement les caractères dansEditText
?
Actuellement, je suis en utilisant un EditText
avec la taille du texte max = 2 avec le code suivant:
final EditText editLetter = (EditText)findViewById(R.id.editHouseLetter);
editLetter.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
if (s!=null && s.length()>1){
editLetter.setText(s.subSequence(1, s.length()));
editLetter.setSelection(1);
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
});
Le point est, lorsqu'un utilisateur entre dans un second char, le premier doit être supprimé . La taille du texte à 2 permet à l'utilisateur d'entrer un autre caractère après que celui-ci a déjà été entré. Je ne comprends pas vraiment comment ça marche mais ça le fait :). Et en plus je devais pointer le curseur dans EditText
à la dernière position car il va toujours au début qui rend impossible d'entrer quoi que ce soit. Je n'ai pas compris pourquoi est-ce non plus.
Le point principal de cette solution est qu'elle a une taille de 2 caractères EditText
, mais je le veux 1-char taille. Et cela permet d'entrer autre chose que les lettres (caractères/alpha) et je ne veux rien d'autre que des caractères.
En utilisant les conseils fournis par sgarman et Character.isLetter()
fonction, méthode afterTextChanged
regarde cette façon maintenant:
public void afterTextChanged(Editable s) {
int iLen=s.length();
if (iLen>0 && !Character.isLetter((s.charAt(iLen-1)))){
s.delete(iLen-1, iLen);
return;
}
if (iLen>1){
s.delete(0, 1);
}
}
J'ai découvert que l'utilisation Selection.setSelection
n'est pas nécessaire dans ce cas. Maintenant, il a un filtre permettant l'entrée de lettres seulement. C'est presque la réponse que je veux. La seule chose qui reste est de savoir comment faire la même chose avec 1 symbole de taille EditText
?
avec la longueur du texte = 2 il fait exactement la même chose. avec la longueur = 1 ça ne marche pas du tout. C'est juste une manière alternative sans utiliser un lien vers ET (editLetter). Merci pour le conseil mais ce n'est pas la réponse. – Stan
@Stan pourquoi avez-vous l'accepter alors ;-) –
S'il vous plaît lire ma question complètement et vous trouverez pourquoi. – Stan