传统的子菜单是以层次结构显示的,而Android中的子菜单采用了弹出式的显示方式。也就是当单击带有子菜单的菜单项后,父菜单会关闭,而在屏幕上会单独显示子菜单。广州网站设计
Menu.addSubMenu方法用来添加子菜单。该方法有4种重载形式,它们的定义如下:广州网站设计
- SubMenu addSubMenu(final CharSequence title);
- SubMenu addSubMenu(final int titleRes);
- SubMenu addSubMenu(final int groupId, final int itemId, int order, final CharSequence title);
- SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes);
addSubMenu方法和add方法的参数个数和类型完全相同,所不同的是它们的返回值类型。addSubMenu方法返回了一个SubMenu对象(SubMenu是Menu的子接口),可以通过SubMenu.add方法添加子菜单项。SubMenu.add方法与Menu.add方法在功能和使用方法上完全相同,这两个add方法都会返回一个MenuItem对象。
在子菜单项上不能显示图像,但可以在子菜单的头部显示图像,不过子菜单项可以带复选框和选项按钮。例如,下面的代码向"文件"菜单项添加了3个子菜单项,并将第1个子菜单项设置成复选框类型,将后两个子菜单项设置成选项按钮类型,同时为子菜单头设置了图像。广州网站建设
- public boolean onCreateOptionsMenu(Menu menu)
- {
- // 添加子菜单
- SubMenu fileSubMenu = menu.addSubMenu(1, 1, 2, "文件");
- fileSubMenu.setIcon(R.drawable.file); // 设置在选项菜单中显示的图像
- fileSubMenu.setHeaderIcon(R.drawable.headerfile); // 设置子菜单头的图像
- MenuItem newMenuItem = fileSubMenu.add(1, 2, 2, "新建");
- newMenuItem.setCheckable(true); // 将第1个子菜单项设置成复选框类型
- newMenuItem.setChecked(true); // 选中第1个子菜单项中的复选框
- MenuItem openMenuItem = fileSubMenu.add(2, 3, 3, "打开");
- MenuItem exitMenuItem = fileSubMenu.add(2, 4, 4, "退出");
- exitMenuItem.setChecked(true); // 将第3个子菜单项的选项按钮设为选中状态
- fileSubMenu.setGroupCheckable(2, true, true); // 将后两个子菜单项设置成选项按钮类型
- }
在编写上面代码时应注意如下几点。
添加子菜单并不是直接在MenuItem下添加菜单项,而需要使用addSubMenu方法创建一个SubMenu对象,并在SubMenu下添加子菜单项。SubMenu和MenuItem是平级的,这一点在添加子菜单时要注意。广州网站建设
将子菜单项设置成复选框类型,需要使用MenuItem.setCheckable方法。但设置成选项按钮类型,不需要使用setCheckable方法,而要将同一组的选项按钮(子菜单项)的groupId设置成相同的值,同时使用setGroupCheckable方法来设置这个groupId。该方法的第1个参数指定子菜单项的groupId,第2个参数必须为true。如果第3个参数为true,相同groupId的子菜单项会被设置成选项按钮效果;如果为false,相同groupId的子菜单项会被设置成复选框效果。根据相同groupId设置的选项按钮和复选框除了显示效果,并没有什么其他的不同。在菜单项上加选项按钮或复选框主要是为了标志菜单项当前的状态,至于选中或未选中状态代表什么,完全由开发人员自己决定。
使用setChecked方法可以将复选框或选项按钮设置成选中状态。广州网站建设
选项菜单不支持嵌套子菜单,也就是说,不能在子菜单项下再建立子菜单,否则系统将抛出异常。
运行程序后,单击选项菜单中的"文件"菜单项,根据setGroupCheckable方法的第3个参数值是true或false,显示的选项效果或复选框效果如图6.4和图6.5所示。
![]() |
| 图6.4 选项按钮效果 |
![]() |
| 图6.5 复选框按钮效果 |





