Ich verwende onKeyListener, um die onKey-Ereignisse zu erhalten. Es funktioniert gut mit der normalen Tastatur. Aber es funktioniert nicht mit der Bildschirmtastatur. Ich kann nur onKey-Ereignisse für Zahlen und nicht für Buchstaben erhalten. Gibt es einen Workaround, um dieses Problem zu lösen? Jede Art von Hilfe wird sehr geschätzt.
Antworten
Zu viele Anzeigen?Ich glaube nicht, dass ein OnKeyListener überhaupt mit der Bildschirmtastatur aufgerufen wird. Es hat etwas mit der Bildschirmtastatur als IME-Gerät zu tun und IME-Geräte möglicherweise andere Dinge als Tastaturen sind. Es scheint jedoch onKeyListener ziemlich nutzlos zu machen, da es nur auf Telefonen mit Hardware-Tastaturen funktioniert. Ich habe vor kurzem dieses Problem umgangen, indem ich TextWatcher auf dem EditText-Feld in meiner Aktivität verwendet habe, anstatt OnKeyListener zu verwenden.
Dies ist wahrscheinlich dumm, aber so funktioniert Android im Moment.
In der Dokumentation heißt es, dass die Tastaturereignisse nur für die Hardware-Tastenanschläge weitergeleitet werden, nicht für die Software.
Die Gerätehersteller werden tatsächlich davon abgeraten, Softkeyboard-Ereignisse über Tastenlistener weiterzuleiten, obwohl es völlig in der Hand des Herstellers liegt, ob er das respektieren möchte oder ob er die Soft- und Hard-Tastaturen tatsächlich gleich behandelt.
Ab Android 4.2.2 wird das Android-System selbst überhaupt keine Tastaturereignisse für die Soft-Tastaturen unterstützen, so dass auch die Hersteller ihren Weg nicht wählen können.
Die einzige narrensichere Option hier ist also, Ihre eigene IME (Softkeyboard) zu implementieren und die Tastenanschläge selbst zu verarbeiten.
TextWatcher kann größtenteils verwendet werden, um die Tastenlistener zu ersetzen, jedoch löst auch editText.setText(...); die TextWatcher-Ereignisse aus. Wenn man also nur an getippten Tasten interessiert ist, ist TextWatcher wahrscheinlich auch keine Lösung.
Bitte seien Sie vorsichtig beim Verwenden von TextWatcher mit AutocomleteTextView oder EditText. Ändern Sie den Text im Inhalt des AutocompleteTextView / EditText nicht innerhalb von TextWatcher-Ereignissen, da Sie ansonsten höchstwahrscheinlich in einer endlosen Ereignis-/Hörschleife landen werden.
Hoffentlich hilft dies, die verfügbaren Optionen zu klären, aber leider bietet es keine funktionierende Lösung.
Enttäuschend, dass Google diesen wichtigen Aspekt ihrer Benutzeroberfläche übersehen hat.
Ich habe das umgangen, indem ich den Listener in seine eigene Methode gesteckt und ihn nach dem ersten Mal erneut aufgerufen habe. Im onCreate rufe ich setKeyListenerForEnter(); auf;
Hier ist dann die Methode:
public void setKeyListenerForEnter(){
final EditText search_entry = (EditText) findViewById(R.id.search_entry);
search_entry.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// Wenn das Ereignis ein Tastendruckereignis auf der "Enter"-Taste ist
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
getSearchResults(v);
setKeyListenerForEnter();
return true;
}
return false;
}
});
}
Ich bin mir nicht sicher, ob dies eine bessere Lösung als die Bearbeitung der IME-Tastatur selbst ist, aber es ist eine Lösung.
- See previous answers
- Weitere Antworten anzeigen
0 Stimmen
Es klingt seltsam, wenn Sie einige Zeichen, aber nicht andere, von der Bildschirmtastatur erhalten. Können Sie den Code Ihres Listeners und den Ort, an dem Sie ihn anhängen, posten?
0 Stimmen
Public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login_screen); emailTxt = (EditText) findViewById(R.id.email); emailTxt.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { Log.i("Schlüsselwert", String.valueOf(keyCode)); }); }
0 Stimmen
Ich lese jetzt nur die Schlüssel.
0 Stimmen
Dein Code funktioniert auf der Emulator-Tastatur und nicht auf der Soft-Tastatur. Irgendeinen Hinweis für die Soft-Tastatur?