2

最初のキー押下を認識しない onKeyDown イベントがあります (イベントに入ることさえありません。「トースト」出力を生成してテストしました)。2回目以降のキープレスでは、完全に機能します。画面上の別の要素をクリックしてキーをもう一度押してみると、もう一度キーを押す必要があります。コードは次のとおりです。

public boolean onKeyDown(int keyCode, KeyEvent event)
{
    switch (keyCode) {
    case KeyEvent.KEYCODE_DPAD_LEFT:
        scorered.performClick();
        return true;


    case KeyEvent.KEYCODE_1:
        red_m1.performClick();
        return true;


        case KeyEvent.KEYCODE_DPAD_RIGHT: 
        scoreblue.performClick();
        return true;


        case KeyEvent.KEYCODE_2: 
        blue_m1.performClick();
        return true;

        case KeyEvent.KEYCODE_BACK:
            finish();
        return true;
    }
    return true;
    }

私は何時間も困惑していたので、どんな助けも大歓迎です!

4

2 に答える 2

1

確かに、そのような振る舞いには正当な理由がありますが、フォーカスを取り除くことが良い解決策であるとは思わないでください。私の回避策は、通常の onKeyDown 機能を「アクティブ化」する keydown イベントを発生させることです。スニペットは次のとおりです。

new Thread(new Runnable() {         
    @Override
    public void run() {
        Instrumentation inst = new Instrumentation();
        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
    }

}).start(); 
于 2014-01-30T16:00:26.787 に答える
0

これを修正するための回避策は、DPAD キーを押す前にビュー フォーカスを削除することです。私の場合はうまくいきます。私はまったく同じ問題を抱えています: Android アクティビティのビューがフォーカスされている場合、最初の DPAD キーイベント、つまりイベントは無視されますKeyDown: これらのメソッドはどれも呼び出されません: onUserInteraction(), dispatchKeyEvent(). onKeyDown()ただし、後続の DPAD キー イベント - KeyUpKeyDownKeyUp、... はキャプチャできます。

この問題は、ソフト キー (Home、Previous、Recents) やハード ボタン キー (BUTTON_A、BUTTON_B、BUTTON_X、BUTTON_Y) では発生しないことに注意してください。

于 2013-07-05T19:44:07.213 に答える