EditText OnKeyListener funktioniert nicht

8

Ich weiß diese / ähnliche Frage wurde schon vorher gestellt, aber die Lösung gegeben funktioniert nicht für mich, also frage ich wieder. Ich habe versucht, die Lösung in dieser Antwort gegeben, aber immer noch meine OnKeyListener wird nie auf einigen Geräten aufgerufen, vor allem diejenigen mit OS Lager. Ich muss das Drücken der Del-Taste der Soft-Tastatur erkennen, wenn in editText kein Zeichen vorhanden ist. Hier ist mein Code;

%Vor%     
Ammar 26.06.2014, 08:30
quelle

4 Antworten

18

Schließlich habe ich mich selbst gelöst, indem ich diese Funktion über TextWatcher implementiert habe. Die größte Hürde war, dass ich die Rücktaste drücken musste, auch wenn kein Zeichen in EditText vorhanden ist oder zumindest der Endbenutzer feststellt, dass dort kein Zeichen vorhanden ist. Die erste Sache konnte nicht erreicht werden, aber ich tat die spätere. Nachfolgend ist die detaillierte Lösung.

Zuerst habe ich immer ein Leerzeichen in meinem editText behalten.

%Vor%

Dann habe ich EditText angepasst, um mich für jede Änderung der Cursorposition zu benachrichtigen. Dieser Zweck wird durch Überschreiben von onSelectionChanged methode von EditText erreicht. Mein angepasstes EditText sieht so aus.

%Vor%

Abschließend höre ich in meiner Aktivität auf das Ereignis cursor position changed und setze meine Cursorposition in editText zurück, wenn sie dort am erforderlichen Startplatz für Leerzeichen ist, d. h. am 0. Index, so;

%Vor%

Ich hoffe, dass dies in ähnlichen Situationen hilfreich wäre. Vorschläge sind willkommen für Verbesserungen / Optimierungen.

    
Ammar 08.07.2014, 06:08
quelle
8

Die Dokumentation besagt, dass die Schlüsselereignisse nur für die Hardware-Schlüsselstriche und nicht für die Software propagiert werden.

Ссылка

Die Gerätehersteller werden tatsächlich davon abgehalten, Soft-Keyboard-Events über Key-Listener zu verbreiten, obwohl es dem Hersteller obliegt, dies zu respektieren oder die Soft- und Hard-Keyboards mit gleichen Bedingungen zu behandeln.

Ab Android 4.2.2 unterstützt das Android-System selbst keine Key-Stoke-Ereignisse für die Soft-Tastaturen, so dass selbst die Hersteller ihren Weg nicht wählen können.

Daher ist die einzige idiotensichere Option, Ihren eigenen IME (Soft Keyboard) zu implementieren und die Tastatureingaben selbst zu handhaben.

TextWatcher kann hauptsächlich verwendet werden, um die Schlüssellistener zu ersetzen, jedoch editText.setText (...); wird auch die TextWatcher-Ereignisse auslösen, wenn also nur an typisierten Schlüsseln interessiert ist, dann ist TextWatcher wahrscheinlich auch keine Lösung.

Bitte seien Sie vorsichtig, wenn Sie TextWatcher mit AutocolleteTextView oder EditText verwenden. Ändern Sie den Text im Text der AutocompleteTextView / EditText nicht innerhalb von TextWatcher-Ereignissen, sonst werden Sie höchstwahrscheinlich in einer unendlichen Ereignis / Hörschleife landen.

    
Ameer 26.06.2014 08:38
quelle
1

Basierend auf der Dokumentation von OnKeyListener scheint es, dass der Callback ist nur für Hardwaretastaturen aufgerufen.

  

Schnittstellendefinition für einen Rückruf, der aufgerufen wird, wenn ein Hardwareschlüsselereignis an diese Ansicht gesendet wird. Der Rückruf wird aufgerufen, bevor das Schlüsselereignis der Ansicht übergeben wird. Dies ist nur für Hardwaretastaturen nützlich. Eine Software-Eingabemethode ist nicht verpflichtet, diesen Listener auszulösen.

    
Nirekin 26.06.2014 08:48
quelle
-3

Versuchen Sie etwas wie folgt:

%Vor%     
Lockon 26.06.2014 08:39
quelle