Start Aktivität, wenn eine Taste getroffen wird

Ich möchte eine Aktivität starten, wenn der Benutzer die Leertaste drückt. Mein Code erkennt nicht, wann die Leertaste angeklickt wird.

@Override public boolean dispatchKeyEvent(KeyEvent e) { if (e.getKeyCode() == KeyEvent.KEYCODE_SPACE) { Toast.makeText(MainActivity.this, "YOU CLICKED SPACE KEY", Toast.LENGTH_LONG).show(); return true; } Toast.makeText(MainActivity.this, "Didnt work", Toast.LENGTH_SHORT) .show(); return super.dispatchKeyEvent(e); }; 

}

4 Solutions collect form web for “Start Aktivität, wenn eine Taste getroffen wird”

Sie können den Listener entweder auf eine View , die den aktuellen Fokus hat , oder verwenden Sie dispatchKeyEvent in Ihrer Activity , wie in dieser Antwort zu sehen ist .

Beide werden arbeiten.


Antwort für deine Kommentare: Wenn du meinem Link gefolgt bist, hast du wahrscheinlich Activity.dispatchKeyEvent(KeyEvent) implementiert. ๐Ÿ™‚

Der Code registriert nicht anykey ich drücke, aber wenn ich die rückseitige Taste drücke, die es für mich drückt "didnt work"

Hast du zufällig den Emulator benutzt? Ich frage das, weil das letzte SDK einige Probleme mit der Emulator-Tastatur zu haben scheint. Die speziellen Tasten (DPAD, HOME, BACK etc.) funktionieren, aber die Onscreen, QWERTY-Tastatur registriert keine Pressen. Die physische Tastatur in meinem Laptop registriert auch keine Pressen.

Frag mich nicht warum

Und ich sage das, weil ich in dieser Woche die Antwort im Link gepostet habe, und es hat gut geklappt. Die Änderung ist, dass ich das Android SDK auf R20 / JB aktualisiert heute Morgen, also ich denke, es könnte ein Faktor sein.

Allerdings wird es nur an einem echten Gerät arbeiten . Ich habe gerade eine physikalische Tastatur mit meinem Tablet (P7510 / Honeycomb 3.2) verbunden, und es hört Raumpressen genau in Ordnung.

Falls du noch zweifelst, ist hier ein Beweis: ๐Ÿ™‚

Bildbeschreibung hier eingeben

 public abstract boolean onKey (View v, int keyCode, KeyEvent event) 

Mit dieser Funktion können Sie prüfen, welche Taste gedrückt wird.

Für diesen Fall, was ich getan habe, ist, habe ich die überschriebene Funktion 'onKey'

 @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == nNeededKeyCode) { //do something } return true; } 

Ps Zuerst musst du 'OnKeyListener ()' benutzen, um das Key Pressereignis zu bekommen

Sorry für die Kopie / Einfügen Antwort, aber dies sollte zu erreichen, was Sie versuchen.

Dies geschieht, wenn der Benutzer die "Leertaste" drückt und dann die Leertaste geht. Wenn du nicht auf sie warten willst, um es loszulassen, kannst du meine booleschen Werte entfernen und deinen Code in der onKeyDown-Funktion ausführen. Hoffe das hilft.

 boolean spacePressed = false; @Override public boolean onKeyDown(View arg0, Editable arg1, int arg2, KeyEvent arg3) { // TODO Auto-generated method stub switch (keyCode) { case KeyEvent.KEYCODE_SPACE: { spacePressed = true; return true; } // other cases can go here } return true; }// End of onKeyDown @Override public boolean onKeyUp(View arg0, Editable arg1, int arg2, KeyEvent arg3) { if (spacePressed){ // start intent // make this false again, so other keys won't trigger it spacePressed = false; } return true; }// End of onKeyUp 
  • Bearbeiten Textschlüssel-Listener
  • Catching-Taste gedrückt mit der virtuellen Tastatur in Android?
  • Android Problem: EditText, KeyListener und die physische Back Button
  • Das Android ist ein Google Android Fan-Website, Alles รผber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.