2009-10-20 5 views
6

Ich habe ein einfaches Android-Spiel, basierend auf dem Lunar Lander Sample erstellt, und ich habe ein Problem mit der Handhabung wichtiger Ereignisse. Wenn die Aktivität gestartet wird, sind die Tasten onKeyDown oder onKeyUp die Tasten dpad up/down/left/right. Weder die Tasten "menu", "back" noch "dpad_center" lösen onKey-Methoden aus. Sobald ich jedoch eine der Tasten dpad up/down/left/right gedrückt habe, können Sie durch Drücken der Tasten menu, back oder dpad_center diese Methoden auslösen. Ich bekomme keine Fehler oder Hinweise darauf, was schief läuft.onKeyDown nicht immer in Android App aufgerufen

Es ist möglich, dass der Fokus falsch eingestellt ist - die Aktivität wird über eine Schaltfläche auf dem Bildschirm gestartet, sodass sie sich im Touchscreen-Modus befinden kann. Wenn das der Fall ist, sollte ich den rechten Fokus-Modus nicht berühren, um das Ereignis zu erfassen?

Ich verwende den Emulator von SDK-1.5r3. Ich konnte das noch nicht an einem echten Handy ausprobieren. Hier ist mein onKeyDown.

public boolean onKeyDown(int keyCode, KeyEvent msg) 
{ 
    Log.d(TAG, "onKeyDown: " + keyCode); 
    return super.onKeyDown(keyCode, msg); 
} 

Dank

Matt

Antwort

24

Ist das onKeyDown in einer Ansicht oder in der Tätigkeit?

Wenn setContentView in einer Ansicht übergeben wird und diese Ansicht setFocusable (true) aufgerufen hat, werden alle wichtigen Ereignisse die Aktivität umgehen und direkt in die Ansicht wechseln.

Wenn andererseits onKeyDown in der Ansicht ist und Sie setContentView nicht für die Aktivität und setFocusable (true) für die Ansicht aufgerufen haben, erhält Ihre Aktivität die Schlüsselereignisse und nicht die Ansicht.

Suchen Sie nach diesen bestimmten Anrufen, aber ich denke, Sie haben Recht, dass es ein Schwerpunktproblem ist.

+6

Es war in der Ansicht - aber beim Auschecken, erkannte ich, dass ich nicht aktiviert hatteFocusableInTouchMode aktiviert - das Hinzufügen in das Problem behoben. –

+0

Ah, cool. Es tut mir leid, dass ich das eigentliche Problem verpasst habe, aber ich bin froh, dass ich helfen konnte. – haseman

+1

Ich habe dies in einem Fragment versucht, aber die onKeyDown() meiner Ansicht wird nie aufgerufen, obwohl ich seine Fokussierbarkeit auf wahr eingestellt habe: 'searchView.setFocusable (true); searchView.setFocusableInTouchMode (true); '. Die onKeyDown() der Aktivität wird zwar aufgerufen, leider aber nicht für den Backkey. – faizal

6

Aktivität onKeyDown/onKeyUp Methoden werden nicht immer aufgerufen. Im Gegensatz zu ihnen dispatchKeyEvent auf Aktivität immer ausgelöst. Keydown/Keyup-Logik hier verschieben. Funktioniert gut.

@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN) { 
     // keydown logic 
     return true; 
    } 
    return false; 
} 
+1

Vielen Dank für den Beitrag. sehr hilfreich :) –

Verwandte Themen