0

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

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

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

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 回答