Was ist der beste Weg, um die Textlänge eines EditText
in Android zu begrenzen ?
Gibt es eine Möglichkeit, dies über XML zu tun?
android
android-edittext
maxlength
hpique
quelle
quelle
Antworten:
Dokumentation
Beispiel
quelle
maxLength
Anwesen funktioniert noch.android:maxLength
entspricht.InputFilter.LengthFilter
Wenn Sie also den Filter programmgesteuert ändern, haben Sie auch den XML-Filter geändert.setFilters
nicht mehrandroid:maxLength
funktioniert, da der vom XML-Code festgelegte Filter überschrieben wird. Mit anderen Worten, wenn Sie Filter programmgesteuert festlegen, müssen Sie sie alle programmgesteuert festlegen.Verwenden Sie einen Eingabefilter, um die maximale Länge einer Textansicht zu begrenzen.
quelle
InputFilter
. Es wirdandroid:maxlength
in der XML-Datei überschrieben , daher müssen wirLengthFilter
diesen Weg hinzufügen .quelle
TextWatcher
.Ein Hinweis für Personen, die bereits einen benutzerdefinierten Eingabefilter verwenden und auch die maximale Länge begrenzen möchten:
Wenn Sie Eingabefilter im Code zuweisen, werden alle zuvor eingestellten Eingabefilter gelöscht, einschließlich eines Satzes mit
android:maxLength
. Ich habe dies herausgefunden, als ich versucht habe, einen benutzerdefinierten Eingabefilter zu verwenden, um die Verwendung einiger Zeichen zu verhindern, die wir in einem Kennwortfeld nicht zulassen. Nach dem Setzen dieses Filters mit setFilters wurde die maxLength nicht mehr beobachtet. Die Lösung bestand darin, maxLength und meinen benutzerdefinierten Filter programmgesteuert zusammenzusetzen. Etwas wie das:quelle
quelle
Ich hatte dieses Problem und ich denke, wir vermissen eine gut erklärte Methode, dies programmgesteuert zu tun, ohne die bereits eingestellten Filter zu verlieren.
Festlegen der Länge in XML:
Wie in der akzeptierten Antwort korrekt angegeben, definieren Sie in Ihrem EditText-XML Folgendes, wenn Sie eine feste Länge für einen EditText definieren möchten, die Sie in Zukunft nicht weiter ändern werden:
Länge programmgesteuert einstellen
Um die Länge programmgesteuert einzustellen, müssen Sie sie über ein einstellen
InputFilter
. Wenn Sie jedoch einen neuen InputFilter erstellen und auf setzen,EditText
gehen alle anderen bereits definierten Filter (z. B. maxLines, inputType usw.) verloren, die Sie möglicherweise entweder über XML oder programmgesteuert hinzugefügt haben.Das ist also FALSCH :
Um zu vermeiden, dass zuvor hinzugefügte Filter verloren gehen, müssen Sie diese Filter abrufen, den neuen hinzufügen (in diesem Fall maxLength) und die Filter
EditText
wie folgt zurücksetzen :Java
Kotlin hat es jedoch für alle einfacher gemacht. Sie müssen den Filter auch zu den bereits vorhandenen hinzufügen, aber Sie können dies mit einem einfachen:
quelle
Für alle anderen, die sich fragen, wie sie dies erreichen können, ist hier meine erweiterte
EditText
KlasseEditTextNumeric
..setMaxLength(int)
- Legt die maximale Anzahl von Ziffern fest.setMaxValue(int)
- Maximaler ganzzahliger Wert begrenzen.setMin(int)
- minimalen ganzzahligen Wert begrenzen.getValue()
- Ganzzahligen Wert abrufenAnwendungsbeispiel:
Alle anderen Methoden und Attribute, die für gelten
EditText
, funktionieren natürlich auch.quelle
Aufgrund der Beobachtung von goto10 habe ich den folgenden Code zusammengestellt, um zu verhindern, dass andere Filter durch Einstellen der maximalen Länge verloren gehen:
quelle
quelle
Xml
Java:
Kotlin:
quelle
Eine andere Möglichkeit, dies zu erreichen, besteht darin, der XML-Datei die folgende Definition hinzuzufügen:
Dadurch wird die maximale Länge des
EditText
Widgets auf 6 Zeichen begrenzt.quelle
Von material.io , können Sie
TextInputEditText
mit kombiniertTextInputLayout
:Sie können ein Passwort EditText mit drawable konfigurieren:
Oder Sie können die Textlänge mit / ohne Zähler begrenzen:
Abhängigkeit:
quelle
XML
android:maxLength="10"
Programmatisch:
Hinweis: Intern analysieren EditText & TextView den Wert von
android:maxLength
in XML und verwenden ihnInputFilter.LengthFilter()
zum Anwenden .Siehe: TextView.java # L1564
quelle
Dies ist eine benutzerdefinierte EditText-Klasse, mit der der Längenfilter zusammen mit anderen Filtern verwendet werden kann. Dank der Antwort von Tim Gallagher (unten)
quelle
es einfache Weise in XML:
Wenn Sie 4 Zeichen in XML-Bearbeitungstext setzen müssen, verwenden Sie diese Option
quelle
Das funktioniert gut ...
android:maxLength="10"
Dies akzeptiert nur
10
Zeichen.quelle
Versuchen Sie dies programmgesteuert für Java :
quelle
myEditText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(CUSTOM_MAX_LEN)});
Ich hatte viele gute Lösungen gesehen, möchte aber eine meiner Meinung nach vollständigere und benutzerfreundlichere Lösung nennen, darunter:
1, Grenzlänge.
2, Wenn Sie mehr eingeben, geben Sie einen Rückruf, um Ihren Toast auszulösen.
3, Cursor kann in der Mitte oder am Ende sein.
4, Benutzer kann durch Einfügen einer Zeichenfolge eingeben.
5, Überlaufeingabe immer verwerfen und Ursprung behalten.
Was ich nicht getan habe, ist, wenn der Benutzer einen Teil der aktuellen Eingabe hervorhebt und versucht, eine sehr lange Zeichenfolge einzufügen, weiß ich nicht, wie die Hervorhebung wiederhergestellt werden soll.
Beispielsweise wird die maximale Länge auf 10 festgelegt, der Benutzer gibt '12345678' ein und markiert '345' als Hervorhebung. Versuchen Sie, eine Zeichenfolge von '0000' einzufügen, die die Begrenzung überschreitet.
Wenn ich versuche, edit_text.setSelection (start = 2, end = 4) zu verwenden, um den Ursprungsstatus wiederherzustellen, wird nur 2 Leerzeichen als '12 345 678 'eingefügt, nicht das Ursprungshighlight. Ich möchte, dass jemand das löst.
quelle
Sie können
android:maxLength="10"
im EditText verwenden. (Hier beträgt das Limit bis zu 10 Zeichen.)quelle
Kotlin:
ZTE Blade A520
hat seltsame Wirkung. Wenn Sie mehr als 10 Symbole eingeben (z. B. 15),EditText
werden die ersten 10 angezeigt, andere 5 sind jedoch nicht sichtbar und nicht zugänglich. Wenn Sie jedoch Symbole mit löschenBackspace
, werden zuerst die rechten 5 Symbole gelöscht und dann die verbleibenden 10 entfernt. Um dieses Verhalten zu überwinden, verwenden Sie eine Lösung :oder dieses:
oder dies, wenn Sie Vorschläge haben möchten:
quelle
es einfache Weise in XML:
Zum programmgesteuerten Einstellen können Sie die folgende Funktion verwenden
quelle