我的应用程序有一个选项菜单,几乎在所有活动中都可用,它是通过实现onCreateOptionsMenu()创建的。但是在一个Activity中有一个PopupWindow,当这个PopupWindow具有焦点(正常运行所需)时,点击菜单按钮不会显示选项菜单。
PopupWindows没有onCreateOptionsMenu()函数。是否有其他方法可以将选项菜单添加到PopupWindow?
或者,当用户点击菜单按钮时,有没有办法从其后面的Activity中获取选项菜单?
答案 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);
}
}