854 Stimmen

Was ist der beste Weg, um die Textlänge von EditText in Android zu begrenzen?

Wie lässt sich die Textlänge eines Dokuments am besten begrenzen? EditText in Android?

Gibt es eine Möglichkeit, dies über xml zu tun?

1 Stimmen

Ich wollte die maximale Anzahl von Zeichen für meinen EditText festlegen. Zuerst war es nicht offensichtlich, dass die Begrenzung der Textlänge dasselbe ist. (Nur eine Anmerkung für einen anderen verwirrten Reisenden).

0 Stimmen

El die richtige Antwort finden Sie hier : stackoverflow.com/a/19222238/276949 . Diese Antwort begrenzt die Länge UND verhindert, dass sich ein Puffer kontinuierlich füllt, nachdem er die Grenze erreicht hat, so dass Ihre Rücktaste richtig zu funktionieren.

1609voto

Austin Hanson Punkte 21180

Dokumentation

Beispiel

android:maxLength="10"

29 Stimmen

Oje! Das Gleiche ist mir auch passiert. Ich habe mir den Code angesehen, und es gibt keine setMaxLength-Methode.

1 Stimmen

Was macht der Check hier? Es verweist nur auf diese Seite.

1 Stimmen

Ich glaube, jemand hielt es für clever, die Seite "Click here" mit dieser Seite zu verlinken. Als ich die Antwort ursprünglich schrieb, war sie mit der Seite für Android-Entwickler verlinkt, aber seitdem wurden Änderungen vorgenommen. Ich werde die Historie durchforsten und eine Änderung beantragen, um den Link wiederherzustellen.

392voto

jerry Punkte 3936

Einen Eingabefilter verwenden, um die maximale Länge einer Textansicht zu begrenzen.

TextView editEntryView = new TextView(...);
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(8);
editEntryView.setFilters(filterArray);

9 Stimmen

Dies ist sehr nützlich, wenn jemand bereits einige InputFilter . Sie übersteuert android:maxlength in der xml-Datei, also müssen wir hinzufügen LengthFilter auf diese Weise.

4 Stimmen

Ich denke, Ihre Antwort ist die beste Antwort, da sie dynamischer ist, +1

229voto

Emran Hamza Punkte 3759
EditText editText = new EditText(this);
int maxLength = 3;    
editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)});

0 Stimmen

Das ist ähnlich wie bei Android mit der xml.

4 Stimmen

Wie kann ich die Mindestlänge festlegen?

0 Stimmen

@AkhilaMadari, wahrscheinlich mit TextWatcher .

83voto

Ricardo Punkte 8388

Ich hatte dieses Problem und bin der Meinung, dass uns eine gut erklärte Möglichkeit fehlt, dies programmatisch zu tun, ohne die bereits gesetzten Filter zu verlieren.

Einstellung der Länge in XML:

Wie die akzeptierte Antwort richtig sagt, wenn Sie eine feste Länge zu einem EditText definieren möchten, die Sie nicht weiter in der Zukunft ändern, definieren Sie einfach in Ihrem EditText XML:

android:maxLength="10"     

Programmatische Einstellung der Länge

Um die Länge programmatisch festzulegen, müssen Sie sie durch eine InputFilter . Wenn Sie jedoch einen neuen InputFilter erstellen und ihn auf den EditText verlieren Sie alle anderen bereits definierten Filter (z. B. maxLines, inputType usw.), die Sie entweder über XML oder programmatisch hinzugefügt haben.

Dies ist also FALSCH :

editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)});

Um zu vermeiden, dass zuvor hinzugefügte Filter verloren gehen, müssen Sie diese Filter abrufen, den neuen Filter (in diesem Fall maxLength) hinzufügen und die Filter wieder auf den EditText wie folgt:

Java

InputFilter[] editFilters = editText.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = new InputFilter.LengthFilter(maxLength); 
editText.setFilters(newFilters);

Kotlin jedoch für alle einfacher gemacht, müssen Sie auch den Filter zu den bereits vorhandenen hinzufügen, aber Sie können das mit einem einfachen erreichen:

editText.filters += InputFilter.LengthFilter(maxLength)

1 Stimmen

+1. Das mit den Filtern war mir nicht bekannt. Otoh, nach dem Vergleich der Java und Kotlin Code frage ich mich, warum Menschen halten darauf bestehen, Java für Android-Entwicklung xd.

73voto

goto10 Punkte 4360

Ein Hinweis für diejenigen, die bereits einen benutzerdefinierten Eingabefilter verwenden und également die maximale Länge begrenzen möchten:

Wenn Sie Eingangsfilter im Code zuweisen, werden alle zuvor gesetzten Eingangsfilter gelöscht, auch die, die mit android:maxLength . Ich fand dies heraus, als ich versuchte, einen benutzerdefinierten Eingabefilter zu verwenden, um die Verwendung einiger Zeichen zu verhindern, die wir in einem Kennwortfeld nicht zulassen. Nachdem ich diesen Filter mit setFilters gesetzt hatte, wurde die maxLength nicht mehr eingehalten. Die Lösung bestand darin, maxLength und meinen benutzerdefinierten Filter zusammen programmatisch zu setzen. Etwa so:

myEditText.setFilters(new InputFilter[] {
        new PasswordCharFilter(), new InputFilter.LengthFilter(20)
});

5 Stimmen

Sie könnten zunächst die vorhandenen Filter abrufen, z.B. InputFilter[] existingFilters = editText.getFilters(); Fügen Sie dann Ihren Filter zusammen mit den vorhandenen Filtern hinzu

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X