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.

12voto

user2586194 Punkte 121

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.

12voto

nhoxbypass Punkte 9298

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

12voto

RonTLV Punkte 2367

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:

password example

Oder Sie können die Textlänge mit/ohne Zähler begrenzen:

counter example

Abhängigkeit:

implementation 'com.google.android.material:material:1.1.0-alpha02'

5voto

CoolMind Punkte 21914

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)

3voto

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.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