Android 菜单(SubMenu)


SubMenu(子菜单),是在选项菜单的基础上增加子菜单。

一个Menu对象可以拥有0或多个SubMenu,通过调用Menu.addSubMenu方法将SubMenu添加到当前Menu中。在SubMenu 添加MenuItem的方式和在Menu中添加MenuItem方式一样,因为SubMenu是Menu的子类,但是SubMenu里不能再添加 SubMenu。

Android提供了基于Group id管理多个MenuItem的方法。

removeGroup(int group):移除所有属于group的MenuItem。

setGroupEnable( int group ,boolean enable):批量开启或关闭整个组的MenuItem。

setGroupVisible( int group ,visible):批量显示或隐藏整个组的MenuItem。

setGroupCheckable( int group ,boolean checkable,boolean exclusive):设置菜单是否可选中。最后一个exclusive是指是单选还是多选,当exclusive是true时,系统将菜单前面添加单选 框,是false时则变成是checkbox多选框。

示例:(在选项菜单[帮助]上配置了三个子菜单[LiveHelp,Email,Phone])


Android 菜单(SubMenu)

Android 菜单(SubMenu)

效果图

Activity代码

      //定义选项菜单    final private static int OPTION_MENU_HELP = 3;//菜单[帮助]的编号     final private static int OPTION_MENUS_GROUP0 = 0;//菜单组0#    final private static int OPTION_MENUS_GROUP1 = 1;//菜单组1#    final private static int OPTION_MENUS_GROUP2 = 2;//菜单组2#    private MenuEntity[] optionMenus = {    new MenuEntity(OPTION_MENUS_GROUP0, 1, 1, "删除",android.R.drawable.ic_menu_delete),    new MenuEntity(OPTION_MENUS_GROUP0, 2, 2, "保存",android.R.drawable.ic_menu_edit),    new MenuEntity(OPTION_MENUS_GROUP0, 3, 3, "帮助",android.R.drawable.ic_menu_help),    new MenuEntity(OPTION_MENUS_GROUP0, 4, 4, "添加",android.R.drawable.ic_menu_add),    new MenuEntity(OPTION_MENUS_GROUP1, 5, 5, "详细",android.R.drawable.ic_menu_info_details),    new MenuEntity(OPTION_MENUS_GROUP1, 6, 6, "发送",android.R.drawable.ic_menu_send),    new MenuEntity(OPTION_MENUS_GROUP1, 7, 7, "电话",android.R.drawable.ic_menu_call),    new MenuEntity(OPTION_MENUS_GROUP1, 8, 8, "照相",android.R.drawable.ic_menu_camera),    };    //定义选项菜单[帮助]的子菜单    private MenuEntity[] helpSubMenus = {    new MenuEntity(OPTION_MENUS_GROUP2, 9, 1, "LiveHelp",android.R.drawable.ic_menu_delete),    new MenuEntity(OPTION_MENUS_GROUP2, 10, 2, "Email",android.R.drawable.ic_menu_edit),    new MenuEntity(OPTION_MENUS_GROUP2, 11, 2, "Phone",android.R.drawable.ic_menu_edit),    };@Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main_list_view);    }/** * 读取选中点击的菜单 * @param index * @return */public String readOptionsMenu(int index){for(int i=0;i<optionMenus.length;i++){if(optionMenus[i].getItemId()==index) return optionMenus[i].getTitle().toString();}for(int i=0;i<helpSubMenus.length;i++){if(helpSubMenus[i].getItemId()==index) return helpSubMenus[i].getTitle().toString();}return "";}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单for(MenuEntity menuEntity:optionMenus){if(OPTION_MENU_HELP==menuEntity.getItemId()){//菜单[帮助]增加子菜单SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());for(MenuEntity subMenuEntity:helpSubMenus){subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());}}else{menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());}}return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int itemId = item.getItemId();Toast.makeText(context, "menu["+itemId+":"+item.getTitle()+"]被点击了", Toast.LENGTH_SHORT).show();return super.onOptionsItemSelected(item);}@Overridepublic void onOptionsMenuClosed(Menu menu) {Toast.makeText(context, "OptionsMenu被关闭了", Toast.LENGTH_SHORT).show();super.onOptionsMenuClosed(menu);}

备注

       private MenuEntity[] optionMenus = {    new MenuEntity(OPTION_MENUS_GROUP0, 1, 1, "删除",android.R.drawable.ic_menu_delete),    new MenuEntity(OPTION_MENUS_GROUP0, 2, 2, "保存",android.R.drawable.ic_menu_edit),    new MenuEntity(OPTION_MENUS_GROUP0, 3, 3, "帮助",android.R.drawable.ic_menu_help),    new MenuEntity(OPTION_MENUS_GROUP0, 4, 4, "添加",android.R.drawable.ic_menu_add),    new MenuEntity(OPTION_MENUS_GROUP1, 5, 5, "详细",android.R.drawable.ic_menu_info_details),    new MenuEntity(OPTION_MENUS_GROUP1, 6, 6, "发送",android.R.drawable.ic_menu_send),    new MenuEntity(OPTION_MENUS_GROUP1, 7, 7, "电话",android.R.drawable.ic_menu_call),    new MenuEntity(OPTION_MENUS_GROUP1, 8, 8, "照相",android.R.drawable.ic_menu_camera),    };    //定义选项菜单[帮助]的子菜单    private MenuEntity[] helpSubMenus = {    new MenuEntity(OPTION_MENUS_GROUP2, 9, 1, "LiveHelp",android.R.drawable.ic_menu_delete),    new MenuEntity(OPTION_MENUS_GROUP2, 10, 2, "Email",android.R.drawable.ic_menu_edit),    new MenuEntity(OPTION_MENUS_GROUP2, 11, 2, "Phone",android.R.drawable.ic_menu_edit),    };

其中的

MenuEntity

参考 关于菜单基础属性的实体类

附录一 : 调用方法 removeGroup(int group)

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单for(MenuEntity menuEntity:optionMenus){if(OPTION_MENU_HELP==menuEntity.getItemId()){//菜单[帮助]增加子菜单SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());for(MenuEntity subMenuEntity:helpSubMenus){subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());}}else{menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());}}menu.removeGroup(OPTION_MENUS_GROUP1);//移除全部group为1的菜单return super.onCreateOptionsMenu(menu);}


Android 菜单(SubMenu)

如图所示:原group为1的菜单不显示了!

附录二 : 调用方法 setGroupEnabled( int group, boolean enabled )

关闭或者开启组为group的全部菜单。(关闭:enabled =false,菜单项变灰,不能点;开启:enabled =false,菜单项正常,可以点)

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单for(MenuEntity menuEntity:optionMenus){if(OPTION_MENU_HELP==menuEntity.getItemId()){//菜单[帮助]增加子菜单SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());for(MenuEntity subMenuEntity:helpSubMenus){subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());}}else{menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());}}menu.setGroupEnabled(OPTION_MENUS_GROUP1, false);//关闭group为1的菜单return super.onCreateOptionsMenu(menu);}

Android 菜单(SubMenu)

Android 菜单(SubMenu)

group为1的菜单项变灰了

更多相关文章

  1. android中完全退出当前应用程序的四种方法
  2. Android中获取控件宽高的4大方法
  3. Android 6.0开发实现关机菜单添加重启按钮的方法
  4. google被墙后,Android SDK下载和更新失败的解决方法!
  5. HierarchyView的实现原理和Android设备无法使用HierarchyView的
  6. SONY 系列手机 Android 5.1 系统 Root 方法
  7. [置顶] 教程--Android SDK更新方法(2016.10.11更新)
  8. 关于Android Studio第一次启动的Fetching android sdk component
  9. Android中startService基本使用方法概述

随机推荐

  1. Android(安卓)淘气三千传之——Android搜
  2. Android中高级联动控件 RecyclerView+Vie
  3. [转] android 日期时间格式转换
  4. Android(安卓)TextView自动换行文字排版
  5. 2010.10.31———Android 04
  6. Ubuntu .bashrc个人配置
  7. android设置状态栏颜色
  8. 淡入淡出动画
  9. Android Socket编程初探
  10. Android JNI入门实例