Frage

Ich mache eine App, ein Spiel, und ich möchte, dass der Player die Rückschaltfläche zum Springen verwenden kann (für Single-Touch-Geräte). Meine Zielplattform ist 2.1 (API -Ebene 7).

Ich habe sowohl Onkeydown () als auch Onbackpression () ausprobiert, aber sie werden nur aufgerufen, wenn der Rückknopf freigegeben wird, nicht wenn sie nach unten gedrückt wird.

1) Ist das normal?

2) Wie kann ich es so machen, dass es die Drücke registriert, wenn die Taste gedrückt wird?

Bearbeiten: Ich möchte auch hinzufügen, dass es mit einer Tastatur korrekt funktioniert (Onkeydown wird aufgerufen, wenn eine Taste gedrückt wird).

War es hilfreich?

Lösung

Update: Ich habe mich darüber neugierig gemacht. Schauen Sie sich den Quellcode von Android.view.View an: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/view/view.java

Ein typisches Beispiel wäre, den Hintertaste zu verarbeiten, um die Benutzeroberfläche der Anwendung zu aktualisieren, anstatt es dem IME zu erlauben, ihn zu sehen und sich selbst zu schließen.

Code:

/**
 * Handle a key event before it is processed by any input method
 * associated with the view hierarchy.  This can be used to intercept
 * key events in special situations before the IME consumes them; a
 * typical example would be handling the BACK key to update the application's
 * UI instead of allowing the IME to see it and close itself.
 *
 * @param keyCode The value in event.getKeyCode().
 * @param event Description of the key event.
 * @return If you handled the event, return true. If you want to allow the
 *         event to be handled by the next receiver, return false.
 */
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
    return false;
}

Verwenden von SendekeyEvent:

@Override
public boolean dispatchKeyEvent (KeyEvent event) {
    Log.d("**dispatchKeyEvent**", Integer.toString(event.getAction()));
    Log.d("**dispatchKeyEvent**", Integer.toString(event.getKeyCode()));
    if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
        Toast.makeText(this, "Back button pressed", Toast.LENGTH_LONG).show();
        return true;
    }
    return false;
}

Protokolliert die beiden Ereignisse unabhängig von der Rückschlüssel. Der einzige Schlüssel, der nicht log, war KEYCODE_HOME, aus irgendeinem Grund. Wenn Sie den gedrückten Rückknopf beibehalten, werden Sie mehrere sehen ACTION_DOWN (0) Ereignisse in Folge (und vieles mehr, wenn Sie return false; stattdessen). Getestet in einem Eclair -Emulator und einem Samsung Captivate (benutzerdefiniertes Froyo ROM).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top