如何为PopupWindow制作选项菜单?

时间:2012-04-18 18:00:01

标签: java android android-ui

我的应用程序有一个选项菜单,几乎在所有活动中都可用,它是通过实现onCreateOptionsMenu()创建的。但是在一个Activity中有一个PopupWindow,当这个PopupWindow具有焦点(正常运行所需)时,点击菜单按钮不会显示选项菜单。

PopupWindows没有onCreateOptionsMenu()函数。是否有其他方法可以将选项菜单添加到PopupWindow?

或者,当用户点击菜单按钮时,有没有办法从其后面的Activity中获取选项菜单?

1 个答案:

答案 0 :(得分: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);
    }
}