【Android】选项菜单optionsMenu

选项菜单就是点击硬键盘的菜单键时弹出的菜单,需要重写Activity的onCreateOptionsMenu()方法。

先上类图。

1.继承关系:

2.关联关系:

温馨提示:SubMenu不能再添加SubMenu,也就是说SubMenu不能嵌套。

 

下面是一个例子。

Activity类:

[java] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. package com.zzj.ui.menudemo;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.Menu;  
  7. import android.view.MenuItem;  
  8. import android.widget.Toast;  
  9.   
  10. import com.zzj.ui.R;  
  11.   
  12. public class MenuActivity extends Activity {  
  13.   
  14.     @Override  
  15.     protected void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.   
  18.         setContentView(R.layout.menudemo_activity);  
  19.     }  
  20.   
  21.     @Override  
  22.     public boolean onCreateOptionsMenu(Menu menu) {  
  23.         Intent intent = new Intent(MenuActivity.this, OtherActivity.class);  
  24.         intent.putExtra("title", "删除");  
  25.   
  26.         /* 
  27.          *  
  28.          * add()方法的四个参数,依次是: 
  29.          *  
  30.          * 1、组别,如果不分组的话就写Menu.NONE, 
  31.          *  
  32.          * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单 
  33.          *  
  34.          * 3、顺序,那个菜单现在在前面由这个参数的大小决定 
  35.          *  
  36.          * 4、文本,菜单的显示文本 
  37.          */  
  38.         menu.add(Menu.NONE, Menu.FIRST + 1, 7, "删除")  
  39.                 .setIcon(android.R.drawable.ic_menu_delete).setIntent(intent);  
  40.         menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon(  
  41.                 android.R.drawable.ic_menu_save);  
  42.         menu.add(Menu.NONE, Menu.FIRST + 3, 3, "查找").setIcon(  
  43.                 android.R.drawable.ic_menu_search);  
  44.         menu.add(Menu.NONE, Menu.FIRST + 4, 4, "发送").setIcon(  
  45.                 android.R.drawable.ic_menu_send);  
  46.         menu.add(Menu.NONE, Menu.FIRST + 5, 5, "详细").setIcon(  
  47.                 android.R.drawable.ic_menu_info_details);  
  48.         menu.add(Menu.NONE, Menu.FIRST + 6, 6, "帮助").setIcon(  
  49.                 android.R.drawable.ic_menu_help);  
  50.         menu.addSubMenu(Menu.NONE, Menu.FIRST + 7, 1, "添加")  
  51.                 .setIcon(android.R.drawable.ic_menu_add)  
  52.                 .setHeaderIcon(android.R.drawable.ic_menu_add)  
  53.                 .add(Menu.NONE, Menu.FIRST + 71, 1, "添加联系人")  
  54.                 .setIcon(android.R.drawable.ic_menu_add);  
  55.         // 如果返回false,菜单将不会显示  
  56.         return true;  
  57.     }  
  58.   
  59.     @Override  
  60.     public boolean onOptionsItemSelected(MenuItem item) {  
  61.         switch (item.getItemId()) {  
  62.         case Menu.FIRST + 1:  
  63.             Toast.makeText(MenuActivity.this, "删除", Toast.LENGTH_LONG).show();  
  64.             break;  
  65.         case Menu.FIRST + 2:  
  66.             Toast.makeText(MenuActivity.this, "保存", Toast.LENGTH_LONG).show();  
  67.             break;  
  68.         case Menu.FIRST + 3:  
  69.             Toast.makeText(MenuActivity.this, "查找", Toast.LENGTH_LONG).show();  
  70.             break;  
  71.         case Menu.FIRST + 4:  
  72.             Toast.makeText(MenuActivity.this, "发送", Toast.LENGTH_LONG).show();  
  73.             break;  
  74.         case Menu.FIRST + 5:  
  75.             Toast.makeText(MenuActivity.this, "详细", Toast.LENGTH_LONG).show();  
  76.             break;  
  77.         case Menu.FIRST + 6:  
  78.             Toast.makeText(MenuActivity.this, "帮助", Toast.LENGTH_LONG).show();  
  79.             break;  
  80.         case Menu.FIRST + 7:  
  81.             Toast.makeText(MenuActivity.this, "添加", Toast.LENGTH_LONG).show();  
  82.             break;  
  83.         case Menu.FIRST + 71:  
  84.             Toast.makeText(MenuActivity.this, "添加联系人", Toast.LENGTH_LONG)  
  85.                     .show();  
  86.             break;  
  87.         default:  
  88.             break;  
  89.         }  
  90.         // 如果返回true,不会再触发MenuItem后面的事件。例如,点击【删除】菜单项时,不会跳转到另一个Activity。实际上就是控制事件传播  
  91.         return false;  
  92.     }  
  93.   
  94.     @Override  
  95.     public void onOptionsMenuClosed(Menu menu) {  
  96.         Toast.makeText(MenuActivity.this, "选项菜单关闭了", Toast.LENGTH_LONG).show();  
  97.     }  
  98.   
  99.     @Override  
  100.     public boolean onPrepareOptionsMenu(Menu menu) {  
  101.         Toast.makeText(MenuActivity.this, "选项菜单将打开", Toast.LENGTH_LONG).show();  
  102.         // 如果返回false,菜单将不会显示  
  103.         return true;  
  104.     }  
  105. }  

其他的代码就免了。

 

 

点击菜单键盘:

点击【添加】:

点击【More】:

 

我们还可以在XML文件中定义菜单,避免代码臃肿。

res/menu/optionsmenu.xml:

[html] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.   
  4.     <group android:id="@+id/file" >  
  5.         <item  
  6.             android:id="@+id/news"  
  7.             android:title="新建"/>  
  8.         <item  
  9.             android:id="@+id/save"  
  10.             android:icon="@android:drawable/ic_menu_save"  
  11.             android:title="保存"/>  
  12.         <item  
  13.             android:id="@+id/other_save"  
  14.             android:title="另保存"/>  
  15.         <item  
  16.             android:id="@+id/close"  
  17.             android:title="关闭"/>  
  18.     </group>  
  19.     <group android:id="@+id/edit" >  
  20.         <item  
  21.             android:id="@+id/copy"  
  22.             android:title="复制">  
  23.   
  24.   
  25.             <!-- 子菜单 -->  
  26.             <menu>  
  27.                 <item  
  28.                     android:id="@+id/copytolocal"  
  29.                     android:title="复制到当前文件夹"/>  
  30.                 <item  
  31.                     android:id="@+id/copytoother"  
  32.                     android:title="复制到其他文件夹"/>  
  33.             </menu>  
  34.         </item>  
  35.         <item  
  36.             android:id="@+id/paste"  
  37.             android:title="粘帖">  
  38.         </item>  
  39.         <item  
  40.             android:id="@+id/cancel"  
  41.             android:title="撤销">  
  42.         </item>  
  43.     </group>  
  44.   
  45. </menu>  

然后重写onCreateOptionsMenu()方法:

[java] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. @Override  
  2.     public boolean onCreateOptionsMenu(Menu menu) {  
  3.         MenuInflater menuInflater = getMenuInflater();  
  4.         menuInflater.inflate(R.menu.optionsmenu, menu);  
  5.   
  6.         return true;  
  7.     }  
posted @ 2016-11-28 17:28  天涯海角路  阅读(113)  评论(0)    收藏  举报