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?
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?
Sie können dies auch erreichen, indem Sie die folgende Definition in die XML-Datei aufnehmen:
<EditText
android:id="@+id/input"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:inputType="number"
android:maxLength="6"
android:hint="@string/hint_gov"
android:layout_weight="1"/>
Dadurch wird die maximale Länge der EditText
Widget bis 6 Zeichen.
XML
android:maxLength="10"
Programmatisch:
int maxLength = 10;
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter.LengthFilter(maxLength);
yourEditText.setFilters(filters);
Hinweis: Intern analysieren EditText und TextView den Wert von android:maxLength
in XML und verwenden InputFilter.LengthFilter()
um sie anzuwenden.
Siehe: TextView.java#L1564
Von material.io können Sie verwenden TextInputEditText
kombiniert mit TextInputLayout
:
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:counterEnabled="true"
app:counterMaxLength="1000"
app:passwordToggleEnabled="false">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/edit_text"
android:hint="@string/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLength="1000"
android:gravity="top|start"
android:inputType="textMultiLine|textNoSuggestions"/>
</com.google.android.material.textfield.TextInputLayout>
Sie können ein Passwort EditText mit drawable konfigurieren:
Oder Sie können die Textlänge mit/ohne Zähler begrenzen:
Abhängigkeit:
implementation 'com.google.android.material:material:1.1.0-alpha02'
Kotlin:
edit_text.filters += InputFilter.LengthFilter(10)
ZTE Blade A520
hat eine seltsame Wirkung. Wenn Sie mehr als 10 Symbole eingeben (z. B. 15), EditText
zeigt die ersten 10, aber die anderen 5 sind nicht sichtbar und nicht zugänglich. Aber wenn Sie die Symbole mit Backspace
werden zuerst die rechten 5 Symbole und dann die restlichen 10 entfernt. Um dieses Verhalten zu umgehen, verwenden Sie eine Lösung :
android:inputType="textNoSuggestions|textVisiblePassword"
android:maxLength="10"
oder dies:
android:inputType="textNoSuggestions"
oder dies, wenn Sie Vorschläge haben möchten:
private class EditTextWatcher(private val view: EditText) : TextWatcher {
private var position = 0
private var oldText = ""
override fun afterTextChanged(s: Editable?) = Unit
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
oldText = s?.toString() ?: ""
position = view.selectionStart
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
val newText = s?.toString() ?: ""
if (newText.length > 10) {
with(view) {
setText(oldText)
position = if (start > 0 && count > 2) {
// Text paste in nonempty field.
start
} else {
if (position in 1..10 + 1) {
// Symbol paste in the beginning or middle of the field.
position - 1
} else {
if (start > 0) {
// Adding symbol to the end of the field.
start - 1
} else {
// Text paste in the empty field.
0
}
}
}
setSelection(position)
}
}
}
}
// Usage:
editTextWatcher = EditTextWatcher(view.edit_text)
view.edit_text.addTextChangedListener(editTextWatcher)
Es auf einfache Weise in xml:
android:maxLength="@{length}"
für die programmatische Einstellung können Sie die folgende Funktion verwenden
public static void setMaxLengthOfEditText(EditText editText, int length) {
InputFilter[] filters = editText.getFilters();
List arrayList = new ArrayList();
int i2 = 0;
if (filters != null && filters.length > 0) {
int filtersSize = filters.length;
int i3 = 0;
while (i2 < filtersSize) {
Object obj = filters[i2];
if (obj instanceof LengthFilter) {
arrayList.add(new LengthFilter(length));
i3 = 1;
} else {
arrayList.add(obj);
}
i2++;
}
i2 = i3;
}
if (i2 == 0) {
arrayList.add(new LengthFilter(length));
}
if (!arrayList.isEmpty()) {
editText.setFilters((InputFilter[]) arrayList.toArray(new InputFilter[arrayList.size()]));
}
}
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.
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.