0

私のアプリには、onCreateOptionsMenu() を実装することによって作成された、ほぼすべてのアクティビティで使用できるオプション メニューがあります。ただし、1 つのアクティビティには PopupWindow があり、この PopupWindow にフォーカスがある場合 (適切に機能するために必要)、メニュー ボタンをタップしてもオプション メニューは表示されません。

PopupWindows には onCreateOptionsMenu() 関数がありません。オプション メニューを PopupWindow に追加する他の方法はありますか?

または、ユーザーがメニューボタンをタップしたときに表示されるように、その背後にあるアクティビティからオプションメニューを取得する方法はありますか?

4

1 に答える 1

0

メニューキーをインターセプトし、アクティビティで openOptionsMenu() を呼び出すことでこれを解決しました。キーリスナーは次のとおりです。

OnKeyListener mMenuKeyListener = new OnKeyListener() {
    @Override
    public boolean onKey(View view, int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_MENU) {
            activity.openOptionsMenu();
            return true;
        } else {
            return false;
        }
    }
};

このキーリスナーをPopupWindowのすべてのビューに追加して機能させる必要があると思うので、それを行う関数を書きました:

public void setupMenuKeyListenerRecursive(View v) {
    if (v != null) {
        try {
            ViewGroup viewGroup = (ViewGroup)v;
            int childCount = viewGroup.getChildCount();
            for (int index = 0; index < childCount; index++) {
                View child = viewGroup.getChildAt(index);
                setupMenuKeyListenerRecursive(child);
            }
        } catch (Exception e) {
        }
        v.setOnKeyListener(mMenuKeyListener);
    }
}
于 2012-06-13T18:30:41.537 に答える