一,3种菜单模式
- 选项菜单(Options Menu):用户可以通过菜单键(Menu)打开菜单或点击右上角打开。
- 上下文菜单(Context Menu):类似于计算机中的“右键菜单”,当用户点击界面上某个元素超过2秒后,将启动注册到该界面元素的上下文菜单。
- 子菜单(SubMenu):子菜单是二级菜单,是将功能相同的操作分组显示,用户点击选项菜单或上下文中的菜单项就可以打开子菜单
- OptionMenu对应的是Activity,一个Activity只能拥有一个选项菜单
- ContextMenu对应的是View,每个View组件都可以设置上下文菜单
二,Activity类中的菜单操作方法
- 所有的菜单创建方法都直接由Activity类本身提供,在Activity类中定义的菜单操作方法如下:
序号 | 方法 | 作用 |
---|---|---|
01 | public void closeContextMenu() | 关闭上下文菜单 |
02 | public void closeOptionMenu() | 关闭选项菜单 |
03 | public boolean onContextItemSelected(MenuItem item) | 上下文菜单被选中时触发 |
04 | public void onContextMenuClosed(Menu menu) | 上下文菜单被关闭时触发 |
05 | public void onCreateContextMenu(ContextMenu menu,View v, ContextMenu.ContextMenuInfo menuInfo) | 创建上下文菜单 |
06 | public boolean onCreateOptionMenu(Menu menu) | 当用户按Menu键时,调用此操作,可生成一个选项菜单 |
07 | public boolean onMenuItemSelected (int featureId, MenuItem item) | 菜单被选中时触发 |
08 | public boolean onOptionsItemSelected (MenuItem item) | 当一个选项菜单中的某个菜单项被选中时触发该操作 |
09 | public void onOptionsMenuClosed (Menu menu) | 当选项菜单被关闭时触发该操作 |
10 | public boolean onPrepareOptionsMenu (Menu menu) | 当选项菜单显示之前触发该操作 |
11 | public void openOptionMenu() | 打开选项菜单 |
12 | public void openContextMenu(View view) | 打开上下文菜单 |
13 | public MenuInflater getMenuInflater () | 获取菜单填充器对象 |
14 | public void registerForContextMenu(View view) | 注册上下文菜单 |
三,菜单操作涉及的2个接口
Activity类的菜单操作所涉及的接口:android.view.Menu,android.view.MenuItem
- Menu接口常用的方法和常量
序号 | 方法或常量 | 作用 |
---|---|---|
01 | public static final int FIRST | 用于定义菜单项的编号 |
02 | public static final int NONE | 表示菜单不分组时使用的值 |
03 | public abstract MenuItem add(int groupid,int itemld,int order,CharSequence title) | 用于向菜单中添加菜单项, 参数:group:菜单所在组编号,itemId:菜单项的I的,order:菜单项的出现顺序,title:菜单项的显示文字 |
04 | public abstract MenuItem add (int groupId, int itemId, int order, int titleRes) | 添加菜单项 |
05 | public abstract SubMenu addSubMenu (int groupId, int itemId, int order, int titleRes) | 添加子菜单 |
06 | public abstract void removeGroup (int groupId) | 删除一个菜单组 |
07 | public abstract void removeItem (int id) | 删除一个菜单项 |
08 | public abstract void clear () | 清空菜单 |
09 | public abstract void close () | 关闭菜单 |
10 | public abstract MenuItem getItem (int index) | 获取指定的菜单项 |
11 | public abstract int size () | 获取菜单项的个数 |
- MenuItem接口常用的方法和常量
序号 | 方法或常量 | 说明 |
---|---|---|
1 | public abstract int getGroupId () | 获取菜单组编号 |
2 | public abstract Drawable getIcon () | 获取菜单项上的图标 |
3 | public abstract int getItemId () | 获取菜单项上的Id |
4 | public abstract int getOrder () 获取菜单项的编号 | |
5 | public abstract SubMenu getSubMenu () | 获取子菜单 |
6 | public abstract CharSequence getTitle () | 获取菜单项的标题 |
7 | public abstract boolean isCheckable () | 判断此菜单项是否可选 |
8 | public abstract boolean isChecked () | 判断此菜单项是否被选中 |
9 | public abstract boolean isEnabled () | 判断此菜单项是否可用 |
10 | public abstract boolean isVisible () | 判断此菜单项是否可见用 |
11 | public abstract MenuItem setCheckable (boolean checkable) | 设置此菜单项是否可选 |
12 | public abstract MenuItem setChecked (boolean checked) | 设置此菜单项是否被选中 |
13 | public abstract MenuItem setEnabled (boolean enabled) | 设置此菜单项是否可用 |
14 | public abstract MenuItem setIcon (Drawable icon) | 设置此菜单项的图标 |
15 | public abstract MenuItem setIcon (int iconRes) | 设置此菜单项的图标 |
16 | public abstract MenuItem setOnMenuItemClickListener (MenuItem.OnMenuItemClickListener menuItemClickListener) | 为此菜单项注册单击监听器 |
17 | public abstract MenuItem setTitle (int title) | 设置菜单项的标题 |
18 | public abstract MenuItem setVisible (boolean visible) | 设置此菜单项是否可见 |
19 | public abstract ContextMenu.ContextMenuInfo getMenuInfo () | 获得菜单中的消息内容 |
四,定义菜单资源文件
- 菜单资源通常在res\menu目录下
- 菜单资源的根元素通常是< menu > < /menu>标记
- < menu> < /menu>一般包含两种元素
< item> < /item>标记
属性 | 描述 |
---|---|
android:id | 用于为菜单项设置ID,也就是唯一标识 |
android:title | 用于为菜单项设置标题 |
android:alphabeticShortcut | 用于为菜单项指定字符快捷键 |
android:numericShortcut | 用于为菜单项指定数字快捷键 |
android:icon | 用于为菜单项指定图标 |
android:enabled | 用于指定该菜单项是否可用 |
android:checkable | 用于指定该菜单项是否可选 |
android:checked | 用于指定该菜单项是否已选中 |
android:visible | 用于指定该菜单项是否可见 |
< group> < /group>标记
属性 | 描述 |
---|---|
android:id | 用于为菜单组设置ID,也就是唯一标识 |
android:checkableBehavior | 用于指定菜单组内各项菜单项的选择行为,可选值为none(不可选)、all(多选)、single(单选) |
android:menuCategory | 用于对菜单进行分类,指定菜单的优先级,可选值为container(容器)、system(系统)、secondary(第二的)和alternative(可供替代的) |
android:enabled | 用于指定该菜单组中的全部菜单项是否可用 |
android:visible | 用于指定该菜单组中全部菜单项是否可见 |