android Menu

 android中的菜单


   菜单是一种常见的应用程序与用户交互的方式,他使用类似列表的形式显示用户可以操作的功能
   ,而用户则可以通过菜单来选择要执行的操作,应用程序也可以对用户的选择进行相关的响应。


   选项菜单
         选项菜单(OptionsMenu)是通过点击设备上Menu建弹出的菜单;
 子菜单(SubMenu)是选择某个菜单项后,再次弹出的下级菜单。
 上下文菜单(ContextMenu)是通过长按(通常是2秒)某个控件后显示的菜单;
            使用资源文件创建选项菜单

         选项菜单 通过res\menu下的XML文件可以配置选项菜单。

<menu xmlns:android="http://schems.android.com/apk/res/android"
		  xmls:tools="http://schemas.android.com/tools"
		  tools:context="cn.edu.menu.MainActivity">
		  <item
		     android:id="@+id/action_setings"
		     android:orderInCategory="100"
		     android:showAsAction="never"
		     android:title="@string/action_settings"/>
		     </menu>

在Activity中的onCreateOptionsMenu()方法将用于实现选项菜单的加载,通常使用开发工具创建Activity
时,对应的部分代码已自动生成:

 public boolean onCreateOptionMenu(Menu menu){
		       getMenuInflater().inflate(R.menu.main,menu);
		       return true;
		       }

在Activity中的onOptionsItemSelected()方法将用于选项菜单中菜单项的响应,通常使用开发工具创建Activity时
,对应的代码已经自动生成:

public boolean onOptionsItemSelected(Menuitem item){
			      int id = item.getItemId();
			      if(id==R.id.action_settings){
			      return true;
			      }
			      return super.onOptionsItemSelected(item);
			   }

通常在配置选项菜单时,需要为每个菜单项配置如下属性:
     id:菜单项的ID标识,用于响应菜单项时,判断当前点击的哪个菜单项;
     orderInCategory:序号,即存在多个菜单项时的排序,取值为整数,数值越小,则越靠前显示,数值越大
     ,则越靠后显示;
     showAsAction:将菜单项显示在ActionBar上,取值为枚举型,包括never、always、ifRooms、withText、collapseActionView;
     title:菜单项上显示的文字。

     实例:

 <menu xmlns:android="http://schems.android.com/apk/res/android"
		  xmls:tools="http://schemas.android.com/tools"
		  tools:context="cn.edu.menu.MainActivity">
		  <item
		     android:id="@+id/action_file"
		     android:orderInCategory="101"//菜单项的排列顺序
		     android:showAsAction="never"
		     android:title="file"/>
		      <item
		     android:id="@+id/action_refactor"
		     android:orderInCategory="103"
		     android:showAsAction="never"
		     android:title="Refactor"/>
		     <item
		     android:id="@+id/action_edit"
		     android:orderInCategory="102"
		     android:showAsAction="never"
		     android:title="Edit"/>
		     </menu>


		     Activity:

		     public boolean onOptionsItemSelected(Menuitem item){
			      int id = item.getItemId();
			      switch(id){
			      case R.id.action_file:
			         Toast.makeText(this,"您选择了File",Toast。LENGTH_SHORT).show();
				 break;
			      case R.id.action_edit:
			         Toast.makeText(this,"您选择了Edit",Toast。LENGTH_SHORT).show();
				 break;
			      case R.id.action_refactor:
			         Toast.makeText(this,"您选择了Refactor",Toast。LENGTH_SHORT).show();
				 break;
				 }
			      return super.onOptionsItemSelected(item);
			   }

实用程序代码创建选项菜单
      Menu类中定义的创建菜单项的方法:

 public MenuItem add(int groupId,int itemId,int order,CharSequence title)
		   public MenuItem add(int groupId,int itemId,int order,int titleRes)

 private static final int MENU_FILE_ID = 9527;
      private static final int MENU_EDIT_ID = 1111;
      private static final int MENU_REFACTOR_ID = 2222;
      private static final int MENU_WINDOW_ID = 3333;
      private static final int MENU_HELP_ID = 4444;
	public boolean onCreateOptionsMenu(Menu menu){
	menu.add(Menu.NONE,MENU_FILE_ID,1,"File");
	menu.add(Menu.NONE,MENU_HELP_ID,5,"Help");
	menu.add(Menu.NONE,MENU_WINDOW_ID,4,"Window");
	menu.add(Menu.NONE,MENU_REFACTOR_ID,3,"Refactor");
	menu.add(Menu.NONE,MENU_EDIT_ID,2,"Edit");
	return true;
	}
        
	public boolean onOptionsItemSelected(Menuitem item){
			      int id = item.getItemId();
			      switch(id){
			      case MENU_FILE_ID:
			         Toast.makeText(this,"您选择了File",Toast。LENGTH_SHORT).show();
				 break;
			      case MENU_EDIT_ID:
			         Toast.makeText(this,"您选择了Edit",Toast。LENGTH_SHORT).show();
				 break;
			      case MENU_REFACTOR_ID:
			         Toast.makeText(this,"您选择了Refactor",Toast。LENGTH_SHORT).show();
				 break;
			      case MENU_WINDOW_ID:
			         Toast.makeText(this,"您选择了Window",Toast。LENGTH_SHORT).show();
				 break;
			      case MENU_HELP_ID:
			         Toast.makeText(this,"您选择了Help",Toast。LENGTH_SHORT).show();
				 break;
				 }
			      return super.onOptionsItemSelected(item);
			   }

为选项菜单添加子菜单
   选项菜单的子菜单(SubMenu)亦可通过配置文件或程序代码创建:
      通过配置文件创建子菜单:为原有的上级菜单项的<item>节点添加<menu>子节点,
      并在<menu>子节点下再添加若干个<item>节点进行配置;


      通过程序代码创建子菜单:调用Menu对象的addSubMenu()创建一般菜单项,通过
      返回值SubMenu对象创建子菜单。


 private static final int MENU_FILE_ID = 9527;
      private static final int MENU_EDIT_ID = 1111;
      private static final int MENU_REFACTOR_ID = 2222;
      private static final int MENU_WINDOW_ID = 3333;
      private static final int MENU_HELP_ID = 4444;
      private static final int MENU_SOURCE_ID = 8888;
	public boolean onCreateOptionsMenu(Menu menu){
	menu.add(Menu.NONE,MENU_FILE_ID,1,"File");
	menu.add(Menu.NONE,MENU_HELP_ID,5,"Help");
	menu.add(Menu.NONE,MENU_WINDOW_ID,4,"Window");
	menu.add(Menu.NONE,MENU_REFACTOR_ID,3,"Refactor");
	menu.add(Menu.NONE,MENU_EDIT_ID,2,"Edit");

	SubMenu subMenu = menu.addSubMenu(Menu.NONE,MENU_SOURCE_ID,4,"source");
	subMenu.add(Menu.NONE,0,1,"Format");
	subMenu.add(Menu.NONE,1,2,"Clean Up");
	return true;
	}

通过配置文件设置:


public boolean onCreateOptionMenu(Menu menu){
		       getMenuInflater().inflate(R.menu.main,menu);
		       return true;
		       }

               <menu xmlns:android="http://schems.android.com/apk/res/android"
		  xmls:tools="http://schemas.android.com/tools"
		  tools:context="cn.edu.menu.MainActivity">
		  <item
		     android:id="@+id/action_file"
		     android:orderInCategory="101"//菜单项的排列顺序
		     android:showAsAction="never"
		     android:title="file">
		        <menu>
			     <item
		     android:id="@+id/action_file_open"
		     android:orderInCategory="1022"
		     android:showAsAction="never"
		     android:title="Open"/>
		     <item
		     android:id="@+id/action_file_save"
		     android:orderInCategory="1012"
		     android:showAsAction="never"
		     android:title="Save"/>
		     </item>
		      <item
		     android:id="@+id/action_refactor"
		     android:orderInCategory="103"
		     android:showAsAction="never"
		     android:title="Refactor"/>
		     <item
		     android:id="@+id/action_edit"
		     android:orderInCategory="102"
		     android:showAsAction="never"
		     android:title="Edit"/>
		     </menu>

创建上下文菜单
          通过重写Activity的onCreateContextMenu()方法可以初始化上下文菜单,菜单项的创建方式
  与在选项菜单中创建菜单项相同;


  需要调用registerForContextMenu(View view)方法将上下文菜单注册到某个控件之上;


  通过重写Activity的onContextMenuSelected()方法可以相应上下文菜单中的选中事件。


 private ImageView imageview;

	   registerForContextMenu(imageview);

	   private static final int MENU_CHANGE_ID = 9521;
	   private static final  int MENU_SAVE_ID =9522;

	   public void onCreateContextMenu(ContextMenu menu,View v,
	       ContextMenuInfo menuInfo){
	          menu.add(Menu.NONE,MENU_CHANGE_ID,1,"Change");
		  menu.add(Menu.NONE,MENU_SAVE_ID,2,"Save");
		  super.onCreateContextMenu(menu,v,menuInfo);
	       }

	       public boolean onContextItemSelected(MenuItem item){
	           switch(item.getItemId()){
		      case MENU_CHANGE_ID:
		         
			   break;
                      case MENU_SAVE_ID:
		         
			   break;
		   
		      
		   }
		   return super.onContextItemSelected(item);
	       }

在ListView中创建上下文菜单


你可能感兴趣的:(android Menu)