In meinem Projekt habe ich eine EditText
. Ich möchte die Zeichen in der zählen EditText
und diese Nummer in a zeigen TextView
. Ich habe den folgenden Code geschrieben und es funktioniert gut. Mein Problem ist jedoch, wenn ich darauf klicke, dass Backspacees zählt, aber ich muss die Anzahl verringern. Wie kann ich berücksichtigen 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){}
});
Antworten:
Verwenden
Das Folgende wurde einmal in einer der Antworten vorgeschlagen, aber es ist sehr ineffizient
quelle
Wie wäre es, wenn Sie nur die Länge des Zeichens in Ihrem EditText abrufen und anzeigen?
etwas in der Richtung von
quelle
textMessage.length()
, ohne es zu tungetText().toString()
. developer.android.com/reference/android/widget/…kleine Änderungen in Ihrem Code:
quelle
Dies ist eine etwas allgemeinere Antwort mit mehr Erklärung für zukünftige Zuschauer.
Fügen Sie einen Text-geänderten Listener hinzu
Wenn Sie die Textlänge ermitteln oder etwas anderes tun möchten, nachdem der Text geändert wurde, können Sie Ihrem Bearbeitungstext einen Listener für Textänderungen hinzufügen.
Der Hörer muss ein
TextWatcher
, die drei Methoden erfordert wird außer Kraft gesetzt:beforeTextChanged
,onTextChanged
, undafterTextChanged
.Die Zeichen zählen
Sie können die Anzahl der Zeichen in
onTextChanged
oderbeforeTextChanged
mit erhaltenoder in
afterTextChanged
mitBedeutung der Methoden
Die Parameter sind etwas verwirrend, daher hier eine zusätzliche Erklärung.
beforeTextChanged
beforeTextChanged(CharSequence charSequence, int start, int count, int after)
charSequence
: Dies ist der Textinhalt, bevor die ausstehende Änderung vorgenommen wird. Sie sollten nicht versuchen, es zu ändern.start
: Dies ist der Index, in den der neue Text eingefügt wird. Wenn ein Bereich ausgewählt ist, ist dies der Anfangsindex des Bereichs.count
: Dies ist die Länge des ausgewählten Textes, der ersetzt werden soll. Wenn nichts ausgewählt ist,count
wird0
.after
: Dies ist die Länge des einzufügenden Textes.onTextChanged
onTextChanged(CharSequence charSequence, int start, int before, int count)
charSequence
: Dies ist der Textinhalt nach der Änderung. Sie sollten hier nicht versuchen, diesen Wert zu ändern. Ändern Sie daseditable
In,afterTextChanged
falls erforderlich.start
: Dies ist der Index des Anfangs, an dem der neue Text eingefügt wurde.before
: Dies ist der alte Wert. Dies ist die Länge des zuvor ausgewählten Texts, der ersetzt wurde. Dies ist der gleiche Wert wiecount
inbeforeTextChanged
.count
: Dies ist die Länge des eingefügten Textes. Dies ist der gleiche Wert wieafter
inbeforeTextChanged
.afterTextChanged
afterTextChanged(Editable editable)
Wie
onTextChanged
diese aufgerufen wird , nachdem die Änderung bereits vorgenommen wurde. Jetzt kann der Text jedoch geändert werden.editable
: Dies ist der bearbeitbare Text desEditText
. Wenn Sie es jedoch ändern, müssen Sie darauf achten, nicht in eine Endlosschleife zu geraten. Weitere Informationen finden Sie in der Dokumentation .Ergänzendes Bild von dieser Antwort
quelle
TextWatcher maritalStatusTextWatcher = new TextWatcher () {@Override public void beforeTextChanged (CharSequence charSequence, int i, int i1, int i2) {
quelle