Android UI学习 - Menu

来源:互联网 发布:淘宝怎么设置id限购 编辑:程序博客网 时间:2024/05/14 03:29

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])

 



 

 

效果图

 

 

Activity代码

Java代码  收藏代码
  1.      //定义选项菜单  
  2.    final private static int OPTION_MENU_HELP = 3;//菜单[帮助]的编号   
  3.    final private static int OPTION_MENUS_GROUP0 = 0;//菜单组0#  
  4.    final private static int OPTION_MENUS_GROUP1 = 1;//菜单组1#  
  5.    final private static int OPTION_MENUS_GROUP2 = 2;//菜单组2#  
  6.    private MenuEntity[] optionMenus = {  
  7.         new MenuEntity(OPTION_MENUS_GROUP0, 11"删除",android.R.drawable.ic_menu_delete),  
  8.         new MenuEntity(OPTION_MENUS_GROUP0, 22"保存",android.R.drawable.ic_menu_edit),  
  9.         new MenuEntity(OPTION_MENUS_GROUP0, 33"帮助",android.R.drawable.ic_menu_help),  
  10.         new MenuEntity(OPTION_MENUS_GROUP0, 44"添加",android.R.drawable.ic_menu_add),  
  11.         new MenuEntity(OPTION_MENUS_GROUP1, 55"详细",android.R.drawable.ic_menu_info_details),  
  12.         new MenuEntity(OPTION_MENUS_GROUP1, 66"发送",android.R.drawable.ic_menu_send),  
  13.         new MenuEntity(OPTION_MENUS_GROUP1, 77"电话",android.R.drawable.ic_menu_call),  
  14.         new MenuEntity(OPTION_MENUS_GROUP1, 88"照相",android.R.drawable.ic_menu_camera),  
  15.         };  
  16.    //定义选项菜单[帮助]的子菜单  
  17.    private MenuEntity[] helpSubMenus = {  
  18.         new MenuEntity(OPTION_MENUS_GROUP2, 91"LiveHelp",android.R.drawable.ic_menu_delete),  
  19.         new MenuEntity(OPTION_MENUS_GROUP2, 102"Email",android.R.drawable.ic_menu_edit),  
  20.         new MenuEntity(OPTION_MENUS_GROUP2, 112"Phone",android.R.drawable.ic_menu_edit),  
  21.         };  
  22.   
  23. @Override  
  24.    public void onCreate(Bundle savedInstanceState) {  
  25.        super.onCreate(savedInstanceState);  
  26.        setContentView(R.layout.main_list_view);  
  27.    }  
  28.   
  29. /** 
  30.  * 读取选中点击的菜单 
  31.  * @param index 
  32.  * @return 
  33.  */  
  34. public String readOptionsMenu(int index){  
  35.     for(int i=0;i<optionMenus.length;i++){  
  36.         if(optionMenus[i].getItemId()==index) return optionMenus[i].getTitle().toString();  
  37.     }  
  38.     for(int i=0;i<helpSubMenus.length;i++){  
  39.         if(helpSubMenus[i].getItemId()==index) return helpSubMenus[i].getTitle().toString();  
  40.     }  
  41.     return "";  
  42. }  
  43.   
  44.   
  45.   
  46. @Override  
  47. public boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单  
  48.     for(MenuEntity menuEntity:optionMenus){  
  49.         if(OPTION_MENU_HELP==menuEntity.getItemId()){  
  50.             //菜单[帮助]增加子菜单  
  51.             SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());  
  52.             for(MenuEntity subMenuEntity:helpSubMenus){  
  53.                 subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());  
  54.             }  
  55.         }else{  
  56.             menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());  
  57.         }  
  58.     }  
  59.     return super.onCreateOptionsMenu(menu);  
  60. }  
  61.   
  62. @Override  
  63. public boolean onOptionsItemSelected(MenuItem item) {  
  64.     int itemId = item.getItemId();  
  65.     Toast.makeText(context, "menu["+itemId+":"+item.getTitle()+"]被点击了", Toast.LENGTH_SHORT).show();  
  66.     return super.onOptionsItemSelected(item);  
  67. }  
  68.   
  69.   
  70.   
  71. @Override  
  72. public void onOptionsMenuClosed(Menu menu) {  
  73.     Toast.makeText(context, "OptionsMenu被关闭了", Toast.LENGTH_SHORT).show();  
  74.     super.onOptionsMenuClosed(menu);  
  75. }  
 

 

备注

 

Java代码  收藏代码
  1.    private MenuEntity[] optionMenus = {  
  2.         new MenuEntity(OPTION_MENUS_GROUP0, 11"删除",android.R.drawable.ic_menu_delete),  
  3.         new MenuEntity(OPTION_MENUS_GROUP0, 22"保存",android.R.drawable.ic_menu_edit),  
  4.         new MenuEntity(OPTION_MENUS_GROUP0, 33"帮助",android.R.drawable.ic_menu_help),  
  5.         new MenuEntity(OPTION_MENUS_GROUP0, 44"添加",android.R.drawable.ic_menu_add),  
  6.         new MenuEntity(OPTION_MENUS_GROUP1, 55"详细",android.R.drawable.ic_menu_info_details),  
  7.         new MenuEntity(OPTION_MENUS_GROUP1, 66"发送",android.R.drawable.ic_menu_send),  
  8.         new MenuEntity(OPTION_MENUS_GROUP1, 77"电话",android.R.drawable.ic_menu_call),  
  9.         new MenuEntity(OPTION_MENUS_GROUP1, 88"照相",android.R.drawable.ic_menu_camera),  
  10.         };  
  11. //定义选项菜单[帮助]的子菜单  
  12. private MenuEntity[] helpSubMenus = {  
  13.         new MenuEntity(OPTION_MENUS_GROUP2, 91"LiveHelp",android.R.drawable.ic_menu_delete),  
  14.         new MenuEntity(OPTION_MENUS_GROUP2, 102"Email",android.R.drawable.ic_menu_edit),  
  15.         new MenuEntity(OPTION_MENUS_GROUP2, 112"Phone",android.R.drawable.ic_menu_edit),  
  16.         };  

 

其中的

Java代码  收藏代码
  1. MenuEntity  

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

 

 

 

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

 

Java代码  收藏代码
  1. @Override  
  2. public boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单  
  3.     for(MenuEntity menuEntity:optionMenus){  
  4.         if(OPTION_MENU_HELP==menuEntity.getItemId()){  
  5.             //菜单[帮助]增加子菜单  
  6.             SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());  
  7.             for(MenuEntity subMenuEntity:helpSubMenus){  
  8.                 subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());  
  9.             }  
  10.         }else{  
  11.             menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());  
  12.         }  
  13.     }  
  14.     menu.removeGroup(OPTION_MENUS_GROUP1);//移除全部group为1的菜单  
  15.     return super.onCreateOptionsMenu(menu);  
  16. }  
 

 

 


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

 

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

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

Java代码  收藏代码
  1. @Override  
  2. public boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单  
  3.     for(MenuEntity menuEntity:optionMenus){  
  4.         if(OPTION_MENU_HELP==menuEntity.getItemId()){  
  5.             //菜单[帮助]增加子菜单  
  6.             SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());  
  7.             for(MenuEntity subMenuEntity:helpSubMenus){  
  8.                 subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());  
  9.             }  
  10.         }else{  
  11.             menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());  
  12.         }  
  13.     }  
  14.     menu.setGroupEnabled(OPTION_MENUS_GROUP1, false);//关闭group为1的菜单  
  15.     return super.onCreateOptionsMenu(menu);  
  16. }  
 

 

 

group为1的菜单项变灰了

2011-06-15 0:51
研究了下Menu菜单图标改变是否会自动刷新 - synge33 - Melancholy斐研究了下Menu菜单图标改变是否会自动刷新 - synge33 - Melancholy斐

package com.test.menu;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.*;public class testmenuActivity extends Activity { public static final int ITEM0 = Menu.FIRST; public static final int ITEM1 = Menu.FIRST+1; Button button1; Button button2; MenuItem item;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        button1 = (Button) findViewById(R.id.button1);        button2 = (Button) findViewById(R.id.button2);        button1.setVisibility(View.INVISIBLE);        button2.setVisibility(View.INVISIBLE);    }        public boolean onCreateOptionsMenu(Menu menu){     super.onCreateOptionsMenu(menu);     menu.add(0, ITEM0, 0, "显示button1");     menu.add(0, ITEM1, 1, "显示button2");     menu.findItem(ITEM1);     item = (MenuItem) menu.findItem(ITEM0);     return true;    }        public boolean onOptionsItemSelected(MenuItem item){     switch (item.getItemId()){     case ITEM0:      actionClickMenuItem1();      bool = false;     break;     case ITEM1:      actionClickMenuItem2();      bool = true;     break;     }          return super.onOptionsItemSelected(item);    }    /*     *点击第一个menu的第一个按钮执行的动作;      */    private void actionClickMenuItem1(){     setTitle("button1 可见");     button1.setVisibility(View.INVISIBLE);     button2.setVisibility(View.VISIBLE);     item.setIcon(R.drawable.menu_start);    }    /*     *点击第一个menu的第一个按钮执行的动作;      */    private void actionClickMenuItem2(){     setTitle("button2 可见");     button2.setVisibility(View.INVISIBLE);     button1.setVisibility(View.VISIBLE);     item.setIcon(R.drawable.menu_end);    }} 



原创粉丝点击