wake-up-neo.com

Zählen von Zeichen im EditText Listener geändert

In meinem Projekt habe ich einen EditTextname__. Ich möchte die Zeichen in EditTextzählen und diese Zahl in TextViewanzeigen. 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){}
}); 
272
Hesam

Benutzen

s.length()

Das Folgende wurde einmal in einer der Antworten vorgeschlagen, aber es ist sehr ineffizient

textMessage.getText().toString().length()
141
xtempore

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));
38
Andreas Wong

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){}
}); 
27
KKumar

Dies ist eine etwas allgemeinere Antwort mit mehr Erklärungen 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 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.

Zeichen zählen

Sie können die Zeichenanzahl in onTextChanged oder beforeTextChanged mit abrufen

charSequence.length()

oder in afterTextChanged mit

editable.length()

Bedeutung 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 Texts, der ersetzt werden soll. Wenn nichts ausgewählt ist, ist count0.
  • 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 .

Zusatzbild von diese Antwort

enter image description here

5
Suragch

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) {

    }
};
0
Chandan Bera