1. 选项菜单:最常规的菜单,android中把它叫做option menu
  2. 子菜单:android中点击子菜单将弹出悬浮窗口显示子菜单项。子菜单不支持嵌套,即子菜单中不能再包括其他子菜单。
  3. 上下文菜单(context menu):android中长按视图控件后出现的菜单,windows点击右键弹出的菜单即上下文菜单
  4. 图标菜单:这个比较简单,就是带icon的菜单项,需要注意的是子菜单项、上下文菜单项、扩展菜单项均无法显示图标
  5. 选择菜单(alternative menu):用的比较少,以后单独介绍,本文先跳过(其实是我还没弄明白啦o(≧v≦)o~~)
  6. 扩展菜单:选项菜单最多只能显示6个菜单项,超过6个时,第6个菜单项会被系统替换为一个叫“更多”的子菜单,原来显示不下的菜单项都作为“更多”菜单的子菜单项。


选项菜单及子菜单

<?xml version="1.0" encoding="utf-8"?> 
   
 
 <menu xmlns:android=" 
 http:///apk/res/android" > 
   
 

 <!-- 我们分三种情况进行设置 --> 
   
 
 <!-- Part 1 :普通情况,我们增加三个MenuItem,item对应MenuItem的格式。item中的android:id直接就是item的ID,即我们menu.add()中的第二个参数。 --> 
   
 
 <!-- title为显示的文字,即menu.add()中的第四个参数 --> 
   
 
 <!-- orderInCategory表明摆放的顺序,不一定从0还是计算,但必须大于等于0,数值小的位于前,如果数值一样,则安顺序摆放,此相当于menu.add()中的第三个参数order。当然我们建议从0,1,2,3....这样依次给出,并且与XML行文的顺序一致。 --> 
   
 
 <!-- icon设置图标,不言自喻 --> 
   
 
 <item 
   
 
 android:id="@+id/menu_quit" 
   
 
 android:title="@string/menu_quit_title" 
   
 
 android:orderInCategory="0" 
   
 
 android:icon="@drawable/menu_close_window"/> 
   
 
 <item 
   
 
 android:id="@+id/menu_help" 
   
 
 android:title="@string/menu_help_title" 
   
 
 android:orderInCategory="1" 
   
 
 android:icon="@drawable/menu_help"/> 
   
 
 <item 
   
 
 android:id="@+id/menu_setting" 
   
 
 android:title="@string/menu_setting_title" 
   
 
 android:orderInCategory="2" 
   
 
 android:icon="@drawable/menu_syssettings"/> 
   
 

 <!-- Part 2 :Group的情况,我们在Group中放入2个item,如果我们要显示3.4的方式,可以增加group的参数android:checkableBehavior来设置,single表示radio box,all表示checkbox,none表示checkable=flase。group中的android:id就是Gourp_ID,即menu.add()中的第一个参数。在这个例子中,我们设置这个group不可视,如果需要显示,代码为:menu.setGroupVisible(.c11_other_stuff, true);--> 
   
 
 <!-- menuCategory指定菜单的优先级 --> 
   
 
 <!-- checkableBehavior指定菜单的选择行为,none(不可选),all(多选),single(单选) --> 
   
 
 <!-- enabled 指定菜单项是否可用 --> 
   
 
 <!-- visible 指定菜单项是否可见 --> 
   
 
 <group 
   
 
 android:id="@+id/menu_group" 
   
 
 android:menuCategory="secondary" 
   
 
 android:checkableBehavior="single" 
   
 
 android:visible="false"> 
   
 
 <item 
   
 
 android:id="@+id/menu_group_about" 
   
 
 android:title="@string/menu_group_about_title" 
   
 
 android:orderInCategory="0" 
   
 
 android:icon="@drawable/menu_about"/> 
   
 
 <item 
   
 
 android:id="@+id/menu_group_copy" 
   
 
 android:title="@string/menu_group_copy_title" 
   
 
 android:orderInCategory="1" 
   
 
 android:icon="@drawable/menu_copy"/> 
   
 
 </group> 
   
 

 <!-- Part 3 :子menu的设置,将在menuItem内部嵌套一个<Menu>,在这个例子中的子菜单,试验了快捷键的方式 --> 
   
 
 <!-- alphabeticShortcut 按键快捷方式 --> 
   
 
 <item 
   
 
 android:id="@+id/menu_submenu" 
   
 
 android:orderInCategory="3" 
   
 
 android:title="@string/menu_submenu_title"> 
   
 
 <menu> 
   
 
 <item 
   
 
 android:id="@+id/menu_submenu_share" 
   
 
 android:title="@string/menu_submenu_share_title" 
   
 
 android:icon="@drawable/menu_sharepage" 
   
 
 android:visible="true" 
   
 
 android:alphabeticShortcut="f"/> 
   
 
 <item 
   
 
 android:id="@+id/menu_submenu_search" 
   
 
 android:title="@string/menu_submenu_search_title" 
   
 
 android:icon="@drawable/menu_search" 
   
 
 android:visible="true" 
   
 
 android:alphabeticShortcut="s"/> 
   
 
 </menu> 
   
 
 </item> 
   
 
 </menu> 
 
 
 
 
 
 
 

  /** 

 

    * Menu键菜单 

 

    */ 

 

   public boolean onCreateOptionsMenu(Menu menu) { 

 

    MenuInflater menuInflater = getMenuInflater(); 

 

    menuInflater.inflate(R.menu.expanded_menus, menu); 

 

    return super.onCreateOptionsMenu(menu); 

 

   } 

 
 

   /** 

 

    * Menu键菜单响应 

 

    */ 

 

   public boolean onOptionsItemSelected(MenuItem item) { 

 

    switch (item.getItemId()) { 

 

    case .menu_quit: 

 

     this.finish(); 

 

     break; 

 

    case .menu_help: 

 

     Toast.makeText(this, "帮助信息", Toast.LENGTH_LONG).show(); 

 

     break; 

 

    } 

 

    return true; 

 

   } 

 
 
 
 
 
 
 
 
 
 
上下文菜单
 

  <?xml version="1.0" encoding="utf-8"?> 
   
 
 <menu xmlns:android=" 
 http:///apk/res/android" > 
   
 
 <item 
   
 
 android:id="@+id/contextmenu_group_about" 
   
 
 android:icon="@drawable/menu_about" 
   
 
 android:orderInCategory="0" 
   
 
 android:title="@string/menu_group_about_title"/> 
   
 
 <item 
   
 
 android:id="@+id/contextmenu_group_copy" 
   
 
 android:title="@string/menu_group_copy_title" 
   
 
 android:orderInCategory="1" 
   
 
 android:icon="@drawable/menu_copy"/> 
   
 
 </menu> 
 
 
 
 
 
 
 

  public void onCreate(Bundle savedInstanceState) { 

 

    super.onCreate(savedInstanceState); 

 

    setContentView(R.layout.main); 

 
indViewById(.tv).setOnCreateContextMenuListener(this); 
 //上下文菜单一定要添加Listener
 

   } 

 

  /** 

 

    * 上下文菜单 

 

    */ 

 

   public void onCreateContextMenu(ContextMenu menu, View v, 

 

     ContextMenuInfo menuInfo) { 

 

    MenuInflater menuInflater = getMenuInflater(); 

 

    menuInflater.inflate(R.menu.context_menu, menu); 

 

    super.onCreateContextMenu(menu, v, menuInfo); 

 

   } 

 

    

 

   /** 

 

    * 上下文菜单响应 

 

    */ 

 

   public boolean onContextItemSelected(MenuItem item) { 

 

    switch (item.getItemId()) { 

 

    case .contextmenu_group_about: 

 

     Toast.makeText(this, "详细信息", Toast.LENGTH_LONG).show(); 

 

     break; 

 

    } 

 

    return true; 

 

   }