In meinem Projekt habe ich einen EditText
name__. Ich möchte die Zeichen in EditText
zählen und diese Zahl in TextView
anzeigen. Ich habe den folgenden Code geschrieben und es funktioniert gut. Mein Problem ist jedoch, wenn ich klicke Backspace es zählt hoch, aber ich muss die Zahl dekrementieren. Wie kann ich das 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){}
});
Benutzen
s.length()
Das Folgende wurde einmal in einer der Antworten vorgeschlagen, aber es ist sehr ineffizient
textMessage.getText().toString().length()
wie wäre es, wenn Sie die Länge des Zeichens in Ihrem EditText abrufen und anzeigen lassen?
etwas entlang der Linie von
tv.setText(s.length() + " / " + String.valueOf(charCounts));
wenige Änderungen in Ihrem Code:
TextView tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
tv.setText(String.valueOf(s.toString().length()));
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
Dies ist eine etwas allgemeinere Antwort mit mehr Erklärungen für zukünftige Zuschauer.
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 mit geändertem Text hinzufügen.
EditText editText = (EditText) findViewById(R.id.testEditText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
Der Listener benötigt ein TextWatcher
, wofür drei Methoden überschrieben werden müssen: beforeTextChanged
, onTextChanged
und afterTextChanged
.
Sie können die Zeichenanzahl in onTextChanged
oder beforeTextChanged
mit abrufen
charSequence.length()
oder in afterTextChanged
mit
editable.length()
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 Texts, der ersetzt werden soll. Wenn nichts ausgewählt ist, ist count
0
.after
: Dies ist die Länge des einzufügenden Texts.onTextChanged
onTextChanged(CharSequence charSequence, int start, int before, int count)
charSequence
: Dies ist der Textinhalt nach der Änderung. Sie sollten nicht versuchen, diesen Wert hier zu ändern. Ändern Sie bei Bedarf das editable
in afterTextChanged
.start
: Dies ist der Index des Anfangs, an dem der neue Text eingefügt wurde.before
: Dies ist der alte Wert. Es ist die Länge des zuvor ausgewählten Texts, der ersetzt wurde. Dies ist derselbe Wert wie count
in beforeTextChanged
.count
: Dies ist die Länge des eingefügten Texts. Dies ist derselbe Wert wie after
in beforeTextChanged
.afterTextChanged
afterTextChanged(Editable editable)
Dies wird wie onTextChanged
aufgerufen, nachdem die Änderung bereits vorgenommen wurde. Jetzt kann der Text jedoch geändert werden.
editable
: Dies ist der bearbeitbare Text von EditText
. Wenn Sie es jedoch ändern, müssen Sie darauf achten, nicht in eine Endlosschleife zu geraten. Weitere Informationen finden Sie in der Dokumentation .TextWatcher maritalStatusTextWatcher = new TextWatcher () { @Override public void beforeTextChanged (CharSequence Zeichenfolge, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
try {
if (charSequence.length()==0){
topMaritalStatus.setVisibility(View.GONE);
}else{
topMaritalStatus.setVisibility(View.VISIBLE);
}
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void afterTextChanged(Editable editable) {
}
};