Wie kann ich ein Löschschlüsselereignis (Rücktaste) für einen editText erkennen? Ich habe versucht, TextWatcher zu verwenden, aber wenn der editText leer ist und ich die Entf-Taste drücke, passiert nichts. Ich möchte erkennen, dass die Löschtaste gegen einen editText gedrückt wird, auch wenn dieser keinen Text enthält.
android
events
android-edittext
key
Buda Gavril
quelle
quelle
event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DEL
Sie dieseEs ist schon eine Weile her, seit du gefragt hast, aber ich hatte nur das gleiche Problem. Wie bereits von Estel erwähnt, besteht das Problem bei Key Listenern darin, dass sie nur mit Hardwaretastaturen funktionieren. Um dies mit einer IME (Soft Keyboard) zu tun , ist die Lösung etwas ausgefeilter.
Die einzige Methode , die wir wirklich wollen , außer Kraft zu setzen ist
sendKeyEvent
in demEditText
‚s -InputConnection
Klasse. Diese Methode wird aufgerufen, wenn Schlüsselereignisse in einem IME auftreten. Um dies zu überschreiben, müssen wir eine benutzerdefinierte Methode implementieren,EditText
die dieonCreateInputConnection
Methode überschreibt und das StandardobjektInputConnection
in eine Proxy-Klasse einschließt! : |Klingt kompliziert, aber hier ist das einfachste Beispiel, das ich erfinden könnte:
In der Zeile mit dem Aufruf von
setRandomBackgroundColor
wird meine spezielle Rücktaste ausgeführt. In diesem Fall ändern Sie dieEditText
Hintergrundfarbe des.Wenn Sie dies aus XML aufblasen, denken Sie daran, den vollständigen Paketnamen als Tag zu verwenden:
quelle
Dies ist nur eine Ergänzung zu Idris 'Antwort und fügt die Überschreibung auch zu deleteSurroundingText hinzu. Weitere Informationen dazu habe ich hier gefunden: Android: Backspace in WebView / BaseInputConnection
quelle
deleteSurroundingText
bisschen war genau das, was ich brauchte, nachdem ich unzählige andere Lösungen ausprobiert hatte.Hier ist meine einfache Lösung, die für alle APIs funktioniert:
UPDATE 17.04.18 .
Wie in den Kommentaren erwähnt, verfolgt diese Lösung die Rücktaste nicht, wenn EditText leer ist (wie die meisten anderen Lösungen).
Für die meisten Anwendungsfälle reicht dies jedoch aus.
PS Wenn ich heute etwas Ähnliches schaffen müsste, würde ich Folgendes tun:
Dann verwenden Sie es einfach als normalen TextWatcher:
quelle
Ich habe 2 Tage geschickt, um eine Lösung zu finden, und ich habe eine funktionierende gefunden :) (auf Softkeys)
Nachdem Sie den Textwatcher zu Ihrem EditText hinzugefügt haben:
Ich hoffe, es funktioniert auch auf anderen Android-Geräten (Samsung, LG usw.).
quelle
Meine einfache Lösung, die perfekt funktioniert. Sie sollten eine Flagge hinzufügen. Mein Code-Snippet:
quelle
Beispiel für die Erstellung von EditText mit TextWatcher
benutzerdefinierter TextWatcher
quelle
für jemanden, der Kotlin benutzt
addOnTextChanged
ist nicht flexibel genug , um einige Fälle zu behandeln (z. B .: Erkennen, ob der Benutzer die Entf- Taste drückt, wenn der Text leer war)setOnkeyListener
funktionierte sogar Softtastatur oder Hardkeyboard! aber nur auf einigen Geräten . In meinem Fall funktioniert es auf Samsung s8, aber nicht auf Xiaomi mi8 se.Wenn Sie Kotlin verwenden, können Sie die Crossline-Funktion verwenden. Dies ist
doOnTextChanged
dasselbe wie,addOnTextChanged
aber der Rückruf wird ausgelöst, selbst wenn der Bearbeitungstext leer war.HINWEIS: doOnTextChanged ist Teil der Android KTX-Bibliothek
quelle
doOnTextChanged
Erweiterungsfunktion in der Android KTX-Bibliothek verfügbar istEditText
? Vielen Dank im VorausEs gibt eine ähnliche Frage im Stackoverflow. Sie müssen überschreiben
EditText
, um Zugriff auf einInputConnection
Objekt zu erhalten, das einedeleteSurroundingText
Methode enthält . Es wird Ihnen helfen, ein Löschereignis (Rücktaste) zu erkennen. Bitte werfen Sie einen Blick auf eine Lösung, die ich dort für Android bereitgestellt habe - Rücktaste nicht erfassen / Löschen in Soft drücken. Tastaturquelle
Das scheint für mich zu funktionieren:
quelle
Ich habe auch das gleiche Problem in Dialog .. weil ich setOnKeyListener verwende .. Aber ich setze Standard return true. Nach Änderung wie unten Code funktioniert es gut für mich ..
quelle
Basierend auf @Jiff ist
ZanyEditText
hierWiseEditText
mitsetSoftKeyListener(OnKeyListener)
quelle
Mein Problem war, dass ich benutzerdefinierte hatte
Textwatcher
, also wollte ich nicht zu einem hinzufügenOnKeyListener
,EditText
und ich wollte keine benutzerdefinierten erstellenEditText
. Ich wollte erkennen, ob die Rücktaste in meinem gedrückt wurdeafterTextChanged
Methode die , daher sollte ich mein Ereignis nicht auslösen.So habe ich das gelöst. Hoffe es wäre hilfreich für jemanden.
quelle
Ich habe @ Jeffs Lösung auf Version 4.2, 4.4, 6.0 getestet. Unter 4.2 und 6.0 funktioniert es gut. Aber auf 4.4 funktioniert es nicht.
Ich habe einen einfachen Weg gefunden, um dieses Problem zu umgehen. Der entscheidende Punkt ist, zu Beginn ein unsichtbares Zeichen in den Inhalt von EditText einzufügen und den Benutzer den Cursor nicht vor diesem Zeichen bewegen zu lassen. Ich füge ein Leerzeichen mit einem ImageSpan mit einer Breite von Null ein. Hier ist mein Code.
Und wir brauchen einen benutzerdefinierten EditText, der einen SelectionChangeListener hat
}}
Und der letzte Schritt
Und jetzt sind wir fertig ~ Wir können das Backspace-Schlüsselereignis erkennen, wenn EditText keinen tatsächlichen Inhalt hat und der Benutzer nichts über unseren Trick weiß.
quelle
Diese Frage mag alt sein, aber die Antwort ist mit einem TextWatcher wirklich einfach.
quelle
Ich habe eine wirklich einfache Lösung gefunden, die mit einer weichen Tastatur funktioniert.
quelle
Sie können einen Schlüssel-Listener für die Aktivität festlegen und in der Rückrufmethode ermitteln, welche Taste der Benutzer gedrückt hat. Der folgende Code dient als Referenz. Ich hoffe es hilft.
quelle