5

オプションメニューを使用しないメインアクティビティがあります。この動作を実装する必要があります。1。Androidメニューボタンを押すと、ポップアップが表示されます。2. Androidメニューボタンをもう一度押すと、ポップアップが閉じられます。

メインアクティビティでonKeyDown()をオーバーライドして#1を実行する方法は知っていますが、#2を実行する方法がわかりません。ポップアップが表示されると、メインアクティビティのonKeyDown()はトリガーされなくなります。

メインアクティビティにポップアップが開いているときにAndroidメニューボタンをキャプチャするにはどうすればよいですか?(私の場合、ポップアップは膨らんだビューのPopupWindowです)。

ところで、ポップアップのメインビューにキーリスナーを設定しようとしましたが、トリガーされません

    mTopView.setOnKeyListener(new View.OnKeyListener() {           
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            LogUtil.debug("*** Key: %d", keyCode);
            return false;
        }
    });
4

2 に答える 2

14

私自身の質問に答えます。PopupWindowビューでsetFocusableInTouchMode()を呼び出すと、トリックが実行され、リスナーが機能します。

PopupMenu popupMenu = ...
...
popupWindow.getContentView().setFocusableInTouchMode(true);
popupMenu.getContentView().setOnKeyListener(new View.OnKeyListener() {        
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode ==  KeyEvent.KEYCODE_MENU && 
                event.getRepeatCount() == 0 && 
                event.getAction() == KeyEvent.ACTION_DOWN) {
            // ... payload action here. e.g. popupMenu.dismiss();
            return true;
        }                
        return false;
    }
});
于 2012-06-27T05:55:32.127 に答える
0

これを試して

if (keyCode == KeyEvent.KEYCODE_MENU) {
        // Do Stuff
    } 
于 2012-06-26T20:33:13.893 に答える