0 Comments

带复选框和选项按钮的子菜单

发布于:2012-11-20  |   作者:广州网站建设  |   已聚集:人围观
带复选框和选项按钮的子菜单

传统的子菜单是以层次结构显示的,而Android中的子菜单采用了弹出式的显示方式。也就是当单击带有子菜单的菜单项后,父菜单会关闭,而在屏幕上会单独显示子菜单。广州网站设计

Menu.addSubMenu方法用来添加子菜单。该方法有4种重载形式,它们的定义如下:广州网站设计


  1. SubMenu addSubMenu(final CharSequence title);  
  2. SubMenu addSubMenu(final int titleRes);  
  3. SubMenu addSubMenu(final int groupId, final int  itemId, int order, final CharSequence title);  
  4. 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个子菜单项设置成复选框类型,将后两个子菜单项设置成选项按钮类型,同时为子菜单头设置了图像。广州网站建设


  1. public boolean onCreateOptionsMenu(Menu menu)  
  2. {  
  3.     // 添加子菜单  
  4.     SubMenu fileSubMenu = menu.addSubMenu(1, 1, 2, "文件");      
  5.     fileSubMenu.setIcon(R.drawable.file);        //  设置在选项菜单中显示的图像  
  6.     fileSubMenu.setHeaderIcon(R.drawable.headerfile);  //  设置子菜单头的图像  
  7.     MenuItem newMenuItem = fileSubMenu.add(1, 2, 2, "新建");  
  8.     newMenuItem.setCheckable(true);                  //  将第1个子菜单项设置成复选框类型  
  9.     newMenuItem.setChecked(true);                  //  选中第1个子菜单项中的复选框  
  10.     MenuItem openMenuItem = fileSubMenu.add(2, 3, 3, "打开");  
  11.     MenuItem exitMenuItem = fileSubMenu.add(2, 4, 4, "退出");  
  12.     exitMenuItem.setChecked(true);                  //  将第3个子菜单项的选项按钮设为选中状态  
  13.     fileSubMenu.setGroupCheckable(2, true, true);  //  将后两个子菜单项设置成选项按钮类型  
  14. }  

在编写上面代码时应注意如下几点。

添加子菜单并不是直接在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  复选框按钮效果
飞机