Android中的Menu有选项菜单(OptionMenu)、上下文菜单(ContextMenu)、弹出菜单(PopupMenu)
1.选项菜单 - OptionMenu和子菜单SubMenu
Android3.0开始,Android手机设备上不再强制提供Menu键,推荐使用的是ActionBar,而在Android 5.0的时候又再次推荐使用全新的控件ToolBar来代替ActionBar。
选项菜单:不支持勾选标记,且只显示菜单的浓缩标题。
子菜单:不支持菜单项图标,不支持嵌套子菜单。
2.上下文菜单 - ContextMenu
上下文菜单不支持菜单快捷键和图标。基本方法与选项菜单类似,区别是上下文菜单重写的是onCreateContextMenu(ContextMenu menu,View source,ContextMenu.ContextMenuInfo menuInfo),其中source代表触发上下文菜单的组件。
3.弹出菜单 - PopuMenu
在指定组件的上方或下方显示菜单。
3. 创建多选菜单项和单选菜单项
调用MenuItem方法中的setCheckable(boolean checkable),设置该方法后默认是多选菜单项
setGroupCheckable(int group,boolean checkable,boolean exclusive):设置group组里的所有菜单项是否可选,exclusive为true,将是一组单选菜单项。
4.Menu中添加子菜单或菜单项的方法
- MenuItem add(int titleRes):添加一个新的菜单项。
- MenuItem add(int groupId,int itemId,int order,CharSequence title):添加一个新的处于groupId组的菜单项。
- MenuItem add(int groupId,int itemId,int order,int titleRes):添加一个新的处于groupId组的菜单项。
- MenuItem add(CharSequence title):添加一个新的菜单项。
- SubMenu addSubMenu(int titleRes):添加一个新的子菜单。
- SubMenu addSubMenu(int groupId,int itemId,int order,int titleRes):添加一个新的处于groupId组的子菜单。
- SubMenu addSubMenu(CharSequence title):添加一个新的子菜单。
- SubMenu addSubMenu(int groupId,int itemId,int order,CharSequence title):添加一个新的处于groupId组的子菜单。
SubMenu额外提供有下面的方法:
- setHeaderIcon(Drawable icon):设置菜单头的图标
- setHeaderIcon(int iconRes):设置菜单头的图标
- setHeaderTitle(int titleRes):设置菜单头的标题
- setHeaderTitle(CharSequence title):设置菜单头的标题
- setHeaderView(View view):使用View来设置菜单头
- Activity中覆写onCreateOptionsMenu
- 重写onOptionItemSelected(MenuItem mi)来响应菜单项的单击事件
-
除了重写onOptionItemSelected方法外还可以通过setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener menuItemClicklistener),但不推荐该方法
-
设置菜单项关联的Activity方法:调用MenuItem中的setIntent(Intent intent)方法
- 重写Activity中的onCreateContextMenu(ContextMenu menu,View source,ContextMenu.ContextMenuInfo menuInfo);
- 调用Activity的registerForContextMenu(View view)方法为view组件注册上下文菜单
- 重写onContextItemSelected(MenuItem mi)方法
- <item.../>:定义菜单项
- <group.../>:将多个<item/>定义的菜单项包装成一个菜单组。该子元素常用属性有:
- checkableBehavior:指定该组菜单的选择行为,包括none(不可选)、all(多选)和single(单选)
- menuCategory:对菜单进行分类,指定菜单的优先级。container、system、secondary和alternative
- visible:指定该组菜单是否可见
- enable:指定该组菜单是否可用
- android:id:为菜单项指定一个唯一标识
- android:title:指定标题
- android:icon:指定图标
- android:checkable:设置菜单项是否可选
- android:checked:设置菜单项是否已选中
- android:visible:菜单项是否可见
- android:enable:菜单项是否可用
- new PopupMenu(Context context,View view);创建下拉菜单,view代表要激发该菜单的组件
- 调用MenuInflater的inflate()方法将菜单资源填充到PopupMenu中
- 调用show()方法显示菜单