Android: OptionsMenu 和 ContextMenu 的区别
一、区别及使用
1.选项菜单
在点击选项菜单(OptionsMenu:点击 menu 弹出的菜单)的菜单项时即调用了 onMenuItemSelected 也调用了 onOptionsItemSelected。
一个Activity对应只有一个 OptionsMenu,只要重写 onCreateOptionsMenu() 方法,即可实现对 OptionMenu 的创建,onCreateOptionsMenu() 只有在 OptionMenu 第一次创建的时候调用,之后的每一次调用都是会调用 onPrepareOptionsMenu() 方法,当退出 OptionMenu 时调用 onOptionsMenuClosed() 方法,当选择 OptionMenu 中的菜单时,触发 onOptionsItemSelected() 方法。
2.上下文菜单
点击上下文菜单(ContextMenu:长按控件时弹出。例如在长按EditTextView时弹出输入的法选择菜单),点击上下文菜单的菜单项时即调用了onMenuItemSelected 也调用了onContextItemSelected 。
上下文菜单,ContentMenu 是针对一个 View 的,而一个 Activity 有多个View,所以需要在 Activity 中注册哪一个 view 需要使用 ContentMenu,通过使用 registerForContextMenu(View v) 或者 View.setOnCreateContextMenuListener(OnCreateContextMenuListener onCreateContextMenuListener) 来实现对 ContentMenu 的注册,然后在重写 onCreateContextMenu 和 onContextItemSelected 来创建 ContextMenu 和选择菜单是触发的时间。
所以,在父 Activity 的 onMenuItemSelected 方法中判断如果是选项菜单就走 onOptionsItemSelected ,如果是上下文菜单就走onContextItemSelected 。
二、其他
还应注意以下几点:
onPrepareOptionsMenu:在显示选项菜单前调用
onOptionsMenuClosed:在选项菜单关闭时被调用
onContextMenuClosed:在上下文菜单关闭时调用