Ich muss eine Formulareingabevalidierung für eine Reihe von EditTexts durchführen. Ich verwende OnFocusChangeListeners, um die Validierung auszulösen, nachdem der Benutzer sie eingegeben hat, aber dies verhält sich für den letzten EditText nicht wie gewünscht.
Wenn ich während der Eingabe in den endgültigen EditText auf die Schaltfläche "Fertig" klicke, wird die Eingabemethode getrennt, aber der technische Fokus geht nie auf den EditText verloren (und daher erfolgt keine Validierung).
Was ist die beste Lösung?
Sollte ich überwachen, wann die InputMethod von jedem EditText getrennt wird, anstatt wenn sich der Fokus ändert? Wenn das so ist, wie?
android
android-edittext
Stefan
quelle
quelle
Antworten:
Warum benutzt du nicht
TextWatcher
?Da Sie eine Reihe von
EditText
zu validierenden Feldern haben, denke ich, dass Folgendes zu Ihnen passen wird:android.text.TextWatcher
SchnittstelleafterTextChanged(Editable s)
Methode wie folgt verwendenDas
Editable s
hilft nicht wirklich herauszufinden, welcher Text des EditText-Felds geändert wird. Sie können aber direkt den Inhalt der EditText-Felder wie überprüfenin der gleichen Methode. Ich hoffe ich bin klar und wenn ich es bin, hilft es! :) :)
EDIT: Für einen saubereren Ansatz beziehen Sie sich auf die Antwort von Christopher Perry unten.
quelle
TextWatcher ist für meinen Geschmack etwas ausführlich, daher habe ich etwas leichter zu schlucken gemacht:
Verwenden Sie es einfach so:
quelle
EditText
IS-ATextView
addTextChangedListener
Stellen Sie sicher, dass Sie anrufen, nachdem Sie Ihren Edittext aus der Ansicht aufgelöst habenWenn Sie bei einem Fehler nette Überprüfungs-Popups und Bilder wünschen, können Sie die hier beschriebene
setError
Methode derEditText
Klasse verwendenquelle
passwordConfirmTextField
, muss aber auf den anderen verweisenpasswordTextField
, damit ich sie vergleichen kann. Irgendwelche Vorschläge?Um die Ausführlichkeit der Validierungslogik zu verringern, habe ich eine Bibliothek für Android erstellt . Es kümmert sich um die meisten täglichen Validierungen mithilfe von Anmerkungen und integrierten Regeln. Es gibt Einschränkungen wie
@TextRule
,@NumberRule
,@Required
,@Regex
,@Email
,@IpAddress
,@Password
, usw.,Sie können diese Anmerkungen zu Ihren UI-Widget-Referenzen hinzufügen und Überprüfungen durchführen. Außerdem können Sie Validierungen asynchron durchführen. Dies ist ideal für Situationen, in denen beispielsweise von einem Remoteserver nach einem eindeutigen Benutzernamen gesucht wird.
Auf der Projekthomepage finden Sie ein Beispiel für die Verwendung von Anmerkungen. Sie können auch den zugehörigen Blog-Beitrag lesen, in dem ich Beispielcodes zum Schreiben benutzerdefinierter Regeln für Validierungen geschrieben habe.
Hier ist ein einfaches Beispiel, das die Verwendung der Bibliothek zeigt.
Die Bibliothek ist erweiterbar. Sie können Ihre eigenen Regeln schreiben, indem Sie die
Rule
Klasse erweitern.quelle
@Length
Anmerkung ersetzt.Dies war eine schöne Lösung von hier
quelle
Aktualisierter Ansatz - TextInputLayout:
Google hat kürzlich eine Design-Support-Bibliothek gestartet. Es gibt eine Komponente namens TextInputLayout , die das Anzeigen eines Fehlers über
setErrorEnabled(boolean)
und unterstütztsetError(CharSequence)
.Wie benutzt man es?
Schritt 1: Wickeln Sie Ihren EditText mit TextInputLayout ein:
Schritt 2: Überprüfen Sie die Eingabe
Ich habe ein Beispiel über mein Github-Repository erstellt . Schauen Sie sich das Beispiel an, wenn Sie möchten!
quelle
com.google.android.material.textfield.TextInputLayout
(beachten Sie die Materialänderung ). IchIch habe eine Klasse geschrieben, die EditText erweitert, die nativ einige Validierungsmethoden unterstützt und tatsächlich sehr flexibel ist.
Während ich schreibe, werden aktuelle Methoden zur Validierung von XML-Attributen nativ unterstützt :
Sie können es hier überprüfen
Hoffe es gefällt euch :)
quelle
Ich finde InputFilter besser geeignet, um Texteingaben auf Android zu validieren.
Hier ein einfaches Beispiel: Wie verwende ich InputFilter, um Zeichen in einem EditText in Android einzuschränken?
Sie können einen Toast hinzufügen, um den Benutzer über Ihre Einschränkungen zu informieren. Überprüfen Sie auch das android: inputType-Tag aus.
quelle
Ich musste eine Validierung innerhalb des Feldes und keine Validierung zwischen den Feldern durchführen, um zu testen, ob meine Werte in einem Fall vorzeichenlose Gleitkommawerte und in einem anderen Fall vorzeichenbehaftete Gleitkommawerte waren. Folgendes scheint für mich zu funktionieren:
Beachten Sie, dass in "numberSigned | numberDecimal" keine Leerzeichen stehen dürfen. Zum Beispiel: "numberSigned | numberDecimal" funktioniert nicht. Ich bin mir nicht sicher warum.
quelle
Das sieht sehr vielversprechend aus und genau das, was der Arzt für mich bestellt hat:
EditText Validator
Benutzerdefinierte Validatoren sowie diese integrierten:
quelle
In der Datei main.xml
Sie können den folgenden Attribut setzen, um zu überprüfen, ob nur alphabetische Zeichen in edittext akzeptiert werden können.
Mach das :
quelle
Sie können das gewünschte Verhalten erzielen, indem Sie zuhören, wenn der Benutzer auf der Tastatur auf die Schaltfläche "Fertig" klickt. Weitere Tipps zur Arbeit mit EditText finden Sie in meinem Beitrag "Android-Formularüberprüfung - der richtige Weg".
Beispielcode:
quelle
Versuchen Sie es mit einer E-Mail- und Passwortüberprüfung
quelle
Ich habe diese Bibliothek für Android erstellt, in der Sie ein Materialdesign EditText im Inneren und EditTextLayout einfach so überprüfen können:
dann können Sie es so verwenden:
Dann können Sie überprüfen, ob es so gültig ist:
Weitere Beispiele und Anpassungen finden Sie im Repository unter https://github.com/TeleClinic/SmartEditText
quelle