<EditText
android:id="@+id/editText2"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:maxLines="5"
android:lines="5">
</EditText>
Der Benutzer kann mehr als 5 Zeilen eingeben, indem er die Eingabetaste / die nächste Zeilentaste drückt. Wie kann ich Benutzereingaben mit EditText auf eine feste Anzahl von Zeilen beschränken?
android
android-layout
android-edittext
Indrek Kõue
quelle
quelle
Antworten:
Das Attribut
maxLines
entspricht der maximalen Höhe vonEditText
, es steuert die äußeren Grenzen und nicht die inneren Textzeilen.quelle
Sie müssen nur sicherstellen, dass Sie das Attribut "inputType" festgelegt haben. Ohne diese Zeile geht es nicht.
quelle
inputType
auf gearbeitettext
. Danke, dass du mir Zeit gespartDies löst nicht das allgemeine Problem der Beschränkung auf n Zeilen. Wenn Sie Ihren EditText auf nur eine Textzeile beschränken möchten, kann dies sehr einfach sein.
Sie können dies in der XML-Datei festlegen.
oder programmatisch
quelle
@ Cedekasem Sie haben Recht, es gibt keinen eingebauten "Zeilenbegrenzer". Aber ich habe selbst eines gebaut. Wenn also jemand interessiert ist, ist der Code unten. Prost.
quelle
Ich habe so etwas gemacht, wie ihr gesucht habt. Hier ist meine
LimitedEditText
Klasse.Eigenschaften:
bringt Sie der Cursor nicht zum Ende - er bleibt dort, wo Sie waren.
Ich schalte den Listener aus, weil jeder Aufruf der
setText()
Methode diese 3 Rückrufmethoden rekursiv aufrufen würde, falls der Benutzer das Zeichen- oder Zeilenlimit überschreitet.Code:
quelle
beforeCursorPosition = getSelectionStart();
imafterTextChanged
Rückruf. Es funktioniert besser , weil , wenn die Eingabee
nach der Eingabeabcd
, die EditText ‚denken‘ können Sie ersetzenabcd
mitabcde
, weil der Eingabemethode Grund.Ich habe dafür eine einfachere Lösung gefunden: D.
Sie können den Wert 3 in
txtSpecialRequests.getLineCount() > 3
an Ihre Bedürfnisse anpassen.quelle
Hier ist ein InputFilter, der die zulässigen Zeilen in EditText begrenzt:
So fügen Sie es EditText hinzu:
quelle
Folgendes habe ich in meinem Projekt verwendet:
Und es hat in allen Szenarien funktioniert
quelle
setze editText
android:inputType="text"
quelle
Einfachste Lösung:
...
quelle
quelle
Dies ist ein Ansatz. Könnte jemandem helfen.
quelle
Eine andere Möglichkeit, Ihre
EditText
Zeile zu beschränken , ist die folgende:Beachten Sie, dass nach Anwendung dieser Transformationsmethode die Eingabetaste beim Drücken Leerzeichen erzeugt. Das befriedigt immer noch die Frage von TS.
quelle
Sie können Ihren Text entsprechend Ihrer Zeilenanzahl einschränken, ich sage etwa 37 Alphabete in einer Zeile
quelle
getLineCount () ist eine Option; Wenn Sie dort Werte ungleich Null wünschen, stellen Sie sicher, dass Ihre Ansicht gemessen wird. Bei Softtastaturen funktioniert onKeyListener nicht, daher müssen Sie addTextChangedListener () hinzufügen, um Textänderungen während der Eingabe zu verfolgen. Sobald Sie genügend Zeilen in den Rückrufen erhalten, tun Sie, was Sie möchten, um es einzuschränken: Löschen Sie Zeichen mit getText (), setText () oder etwas Besonderem. Sie können die Anzahl der Zeichen sogar mithilfe eines Filters begrenzen.
Eine weitere Option ist die Überwachung der Textgröße mit getLineBounds (). Dies wirkt sich auf die Schwerkraft / das Paddign des Textes aus. Seien Sie also vorsichtig.
quelle
Um die Anzahl der Zeichen zu begrenzen, können Sie einfach die Eigenschaft maxLength von EditText verwenden, da der Benutzer keine weiteren Zeichen eingeben kann.
quelle
quelle
Eine andere Idee: Jedes Mal nach der Eingabe wird neuer Text in einem String lastText gespeichert, nur wenn die Anzahl der Zeilen MAX_LINES nicht überschreitet. In diesem Fall setzen wir den Text von EditText auf den zuletzt hinzugefügten Text (damit die Änderungen gelöscht werden) und benachrichtigen den Benutzer, ihn kurz zu halten.
quelle
Dies ist eine Erweiterung der Antwort von Indrek Kõue auf Kotlin
quelle
Versuchen Sie, die folgende Kombination von Attributen des EditText in der XML-Datei zu verwenden:
android:singleLine="true"
android:maxLength="22"
quelle
android:inputType
ersetzt die Verwendung vonandroid:singleLine