Dans mon projet, j'ai un EditText
. Je veux compter les caractères dans le EditText
, et montrer ce nombre dans un TextView
. J'ai écrit le code suivant et cela fonctionne très bien. Cependant, mon problème est quand je clique Backspacedessus, mais je dois décrémenter le nombre. Comment puis-je considérer Backspace?
tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
i++;
tv.setText(String.valueOf(i) + " / " + String.valueOf(charCounts));
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
Réponses:
Utilisation
Ce qui suit a déjà été suggéré dans l'une des réponses, mais son très inefficace
la source
que diriez-vous simplement d'obtenir la longueur du caractère dans votre EditText et de l'afficher?
quelque chose le long de la ligne de
la source
textMessage.length()
, pas besoin de le fairegetText().toString()
. developer.android.com/reference/android/widget/…peu de changements dans votre code:
la source
Il s'agit d'une réponse légèrement plus générale avec plus d'explications pour les futurs téléspectateurs.
Ajouter un écouteur de texte modifié
Si vous souhaitez trouver la longueur du texte ou faire autre chose après que le texte a été modifié, vous pouvez ajouter un écouteur de texte modifié à votre texte d'édition.
L'auditeur a besoin d' un
TextWatcher
, ce qui nécessite trois méthodes pour être surchargée:beforeTextChanged
,onTextChanged
etafterTextChanged
.Compter les caractères
Vous pouvez obtenir le nombre de caractères dans
onTextChanged
oubeforeTextChanged
avecou
afterTextChanged
avecSignification des méthodes
Les paramètres sont un peu déroutants alors voici une petite explication supplémentaire.
beforeTextChanged
beforeTextChanged(CharSequence charSequence, int start, int count, int after)
charSequence
: Il s'agit du contenu du texte avant la modification en attente. Vous ne devriez pas essayer de le changer.start
: Il s'agit de l'index de l'endroit où le nouveau texte sera inséré. Si une plage est sélectionnée, il s'agit de l'index de début de la plage.count
: Il s'agit de la longueur du texte sélectionné qui va être remplacé. Si rien n'est sélectionné, cecount
sera le cas0
.after
: c'est la longueur du texte à insérer.onTextChanged
onTextChanged(CharSequence charSequence, int start, int before, int count)
charSequence
: Il s'agit du contenu du texte après la modification. Vous ne devez pas essayer de modifier cette valeur ici. Modifiez l'entrée si vouseditable
enafterTextChanged
avez besoin.start
: Il s'agit de l'index du début de l'endroit où le nouveau texte a été inséré.before
: Ceci est l'ancienne valeur. C'est la longueur du texte précédemment sélectionné qui a été remplacée. Il s'agit de la même valeur quecount
dansbeforeTextChanged
.count
: Il s'agit de la longueur du texte inséré. Il s'agit de la même valeur queafter
dansbeforeTextChanged
.afterTextChanged
afterTextChanged(Editable editable)
Comme
onTextChanged
, ceci est appelé après que le changement a déjà été effectué. Cependant, maintenant le texte peut être modifié.editable
: Ceci est le texte modifiable duEditText
. Si vous le changez, cependant, vous devez faire attention à ne pas entrer dans une boucle infinie. Voir la documentation pour plus de détails.Image supplémentaire de cette réponse
la source
TextWatcher maritalStatusTextWatcher = new TextWatcher () {@Override public void beforeTextChanged (CharSequence charSequence, int i, int i1, int i2) {
la source