Ich möchte die Zeichen nur auf 0-9, az, AZ und die Leertaste beschränken. Festlegen des Eingabetyps Ich kann mich auf Ziffern beschränken, aber ich kann nicht herausfinden, wie Inputfilter die Dokumente durchsucht.
android
android-edittext
Tim Wayne
quelle
quelle
InputFilter
s sind in Android-Versionen, in denen Wörterbuchvorschläge angezeigt werden, etwas kompliziert. Manchmal erhalten Sie eineSpannableStringBuilder
, manchmal eine EbeneString
imsource
Parameter.Folgendes
InputFilter
sollte funktionieren. Fühlen Sie sich frei, diesen Code zu verbessern!quelle
String replacement = source.subSequence(start, end).toString(); return replacement.replaceAll("[^A-Za-z0-9_\\-@]", "");
source instanceof SpannableStringBuilder
Eingabe von AB AAB, wie wenn ich die vorherige Antwort versuche. Glücklicherweise konnte ich es mithilfe der folgenden @ florian-Lösung umgehen.viel einfacher:
quelle
","
dazwischen geben. Sie können so etwas verwenden"0123456789qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM"
imeOptions="actionNext"
usw.Keine der geposteten Antworten hat bei mir funktioniert. Ich kam mit meiner eigenen Lösung:
quelle
EditText
bereits eigene Filter haben kann, zB Längenfilter. Anstatt nur die Filter zu überschreiben, möchten Sie Ihre Filter höchstwahrscheinlich zu bereits vorhandenen hinzufügen.Verwenden Sie dies seine Arbeit 100% Ihre Bedürfnisse und sehr einfach.
In strings.xml
quelle
Um Sonderzeichen im Eingabetyp zu vermeiden
Sie können den Filter wie unten beschrieben auf Ihren Bearbeitungstext einstellen
quelle
Zusätzlich zur akzeptierten Antwort ist es auch möglich, zB:
android:inputType="textCapCharacters"
als Attribut von<EditText>
zu verwenden, um nur Großbuchstaben (und Zahlen) zu akzeptieren.quelle
Aus irgendeinem Grund ist der Konstruktor der android.text.LoginFilter-Klasse paketbasiert, sodass Sie ihn nicht direkt erweitern können (obwohl er mit diesem Code identisch wäre). Sie können LoginFilter.UsernameFilterGeneric jedoch erweitern! Dann haben Sie einfach Folgendes:
Dies ist nicht wirklich dokumentiert, aber es ist Teil der Kernbibliothek und die Quelle ist unkompliziert . Ich benutze es jetzt schon eine Weile, bisher keine Probleme, obwohl ich zugeben muss, dass ich nichts Komplexes mit spannables versucht habe.
quelle
Es ist richtig, der beste Weg, dies im XML-Layout selbst zu beheben, indem Sie Folgendes verwenden:
Wie Florian Fröhlich zu Recht betont, eignet es sich auch gut für Textansichten.
Nur ein Wort der Vorsicht, die in der genannten Zeichen
android:digits
werden nur angezeigt. Achten Sie also darauf, dass Sie keine Zeichen verpassen :)quelle
inputType
dies keinen Einfluss auf die Filterung.Diese einfache Lösung funktionierte für mich, als ich verhindern musste, dass der Benutzer leere Zeichenfolgen in einen EditText eingibt. Sie können natürlich weitere Zeichen hinzufügen:
quelle
Wenn Sie InputFilter unterordnen, können Sie Ihren eigenen InputFilter erstellen, der alle nicht alphanumerischen Zeichen herausfiltert.
Die InputFilter-Schnittstelle verfügt über eine Methode:
filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
und bietet Ihnen alle Informationen, die Sie benötigen, um zu wissen, welche Zeichen in den EditText eingegeben wurden, dem sie zugewiesen sind.Nachdem Sie Ihren eigenen InputFilter erstellt haben, können Sie ihn dem EditText zuweisen, indem Sie setFilters (...) aufrufen.
http://developer.android.com/reference/android/text/InputFilter.html#filter(java.lang.CharSequence , int, int, android.text.Spanned, int, int)
quelle
Ich ignorierte das Span-Zeug, mit dem sich andere Leute befasst haben, um Wörterbuchvorschläge richtig zu handhaben. Ich fand, dass der folgende Code funktioniert.
Die Quelle wächst mit dem Vorschlag, daher müssen wir uns ansehen, wie viele Zeichen wir tatsächlich ersetzen sollen, bevor wir etwas zurückgeben.
Wenn wir keine ungültigen Zeichen haben, geben Sie null zurück, damit die Standardersetzung erfolgt.
Andernfalls müssen wir die gültigen Zeichen aus dem Teilstring extrahieren, der tatsächlich in den EditText eingefügt wird.
quelle
um Wörter in edittext zu verhindern. Erstelle eine Klasse, die du jederzeit verwenden kannst.
quelle
Zuerst hinzufügen in
strings.xml
:XML :
Code in Kotlin:
Seltsam, aber es funktioniert komisch auf der Softtastatur des Emulators.
Warnung! Der folgende Code filtert alle Buchstaben und anderen Symbole mit Ausnahme der Ziffern für Software-Tastaturen. Auf Smartphones wird nur die digitale Tastatur angezeigt.
Ich habe auch in der Regel eingestellt
maxLength
,filters
,inputType
.quelle
Dies ist ein alter Thread, aber die beabsichtigten Lösungen haben alle Probleme (abhängig von Gerät / Android-Version / Tastatur).
VERSCHIEDENER ANSATZ
Also habe ich mich irgendwann für einen anderen Ansatz entschieden, anstatt die
InputFilter
problematische Implementierung zu verwenden, die ich verwende,TextWatcher
und dieTextChangedListener
derEditText
.VOLLSTÄNDIGER CODE (BEISPIEL)
Der Grund, warum
InputFilter
Android keine gute Lösung ist, liegt darin, dass es von der Tastaturimplementierung abhängt. Die Tastatureingabe wird gefiltert, bevor die Eingabe an die übergeben wirdEditText
.InputFilter.filter()
Dies ist jedoch problematisch , da einige Tastaturen unterschiedliche Implementierungen für den Aufruf haben.Auf der anderen Seite
TextWatcher
kümmert sich die Tastaturimplementierung nicht darum, sondern ermöglicht es uns, eine einfache Lösung zu erstellen und sicherzustellen, dass sie auf allen Geräten funktioniert.quelle
onTextChanged
braucht einfach einpublic void
davor.Ich habe so etwas getan, um es einfach zu halten:
Auf diese Weise ersetzen wir alle unerwünschten Zeichen im neuen Teil der Quellzeichenfolge durch eine leere Zeichenfolge.
Die
edit_text
Variable ist dieEditText
Objekt, auf das wir uns beziehen.Der Code ist in geschrieben
kotlin
.quelle
Es ist möglich zu verwenden
setOnKeyListener
. In dieser Methode können wir die Eingabe anpassenedittext
!quelle
Auf diese Weise habe ich einen Filter für das Feld Name in Text bearbeiten erstellt. (Der erste Buchstabe ist GROSSBUCHSTABEN. Nach jedem Wort darf nur ein Leerzeichen stehen.
quelle
Ich habe die gleiche Antwort in Kotlin:
und erhalten Sie die Klasse mit einer Erweiterungsfunktion:
quelle