Android菜单实现两种方式

结果如下:

第一种编程方式:

Java代码  收藏代码
  1. package com.easyway.android.menu;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.view.MenuItem;  
  7. import android.widget.TextView;  
  8. /** 
  9.  * Android菜单实现功能 
  10.  * @author longgangbai 
  11.  * 
  12.  */  
  13. public class AndroidMenuActivity extends Activity {  
  14.     private TextView textView;  
  15.       
  16.     /** Called when the activity is first created. */  
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.main);  
  21.           
  22.         textView=(TextView)findViewById(R.id.txtview);  
  23.            
  24.     }  
  25.       
  26.     /** 
  27.      * 创建一个上下文可选菜单 
  28.      */  
  29.     @Override  
  30.     public boolean onCreateOptionsMenu(Menu menu) {  
  31.         super.onCreateOptionsMenu(menu);  
  32.           
  33.         menu.add(0, Menu.FIRST, Menu.NONE, "编辑");  
  34.         menu.add(0, Menu.FIRST + 1, Menu.NONE, "保存");  
  35.         menu.add(0, Menu.FIRST + 2, Menu.NONE, "删除");  
  36.         return true;  
  37.     }  
  38.       
  39.     @Override  
  40.     public boolean onOptionsItemSelected(MenuItem item) {  
  41.         super.onOptionsItemSelected(item);  
  42.         switch (item.getItemId()) {  
  43.         //获取菜单项的ID,即前面Menu.add方法的第二个参数  
  44.         case Menu.FIRST:  
  45.             textView.setText("编辑");  
  46.             break;  
  47.         case Menu.FIRST + 1:  
  48.             textView.setText("保存");  
  49.             break;  
  50.         case Menu.FIRST + 2:  
  51.             textView.setText("删除");  
  52.             break;  
  53.         default:  
  54.             break;  
  55.         }  
  56.         return true;  
  57.     }  
  58. }  

第二种方式声明方式:

res/menu/menu.xml

Java代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <item android:title="保存" android:id="@+id/ID_SAVE"></item>  
  4.     <item android:title="编辑" android:id="@+id/ID_EDIT"></item>  
  5.     <item android:title="删除" android:id="@+id/ID_DELETE"></item>  
  6. </menu>  

实现为:

Java代码  收藏代码
  1. package com.easyway.android.mens;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.view.MenuInflater;  
  7. import android.view.MenuItem;  
  8. import android.widget.TextView;  
  9. /** 
  10.  * Android菜单实现功能 
  11.  *  
  12.  * Android程序使用菜单是非常之方便的,而且Android系统的菜单也做得很有特色,系统有专门的Menu键, 
  13.  * 而且菜单的样式不同于通常的弹出或者下拉菜单,Android的菜单更像是堆砌起来的。 
  14.  *Menu是android.view包里面的接口,它菜单通常是作为Activity的一部分。 
  15.  * 
  16.  *在Android的文档里面这样描述Menu: 
  17.  *  通常,每个Activity都支持(这里意思应该是已经创建好,默认存在菜单)一个选项菜单 
  18.  *  (option menu)和相应的事件响应。可以为菜单添加菜单项和相应的事件处理。添加菜单项最简 
  19.  *  单的方法是是使用XML文件,在Menu标签下使用 MenuInflater,然后重载Activity的 
  20.  *  onOptionsItemSelected(MenuItem) 方法或者onContextItemSelected(MenuItem) 方法, 
  21.  *  在方法体里添加事件处理代码。 
  22.  *   
  23.  *  总的来说,有三种类型的菜单:  
  24.  *      Contex Menus,情境菜单:不支持菜单快捷键和图标。  
  25.  *      Options Menus,选项菜单:支持图标,但不支持菜单项选中标记。  
  26.  *      Sub menus,子菜单,不支持图标,不能再有子菜单。  
  27.  * @author longgangbai 
  28.  * 
  29.  */  
  30. public class AndroidXmlMenuActivity extends Activity {  
  31.   
  32.   
  33.         private TextView textView;  
  34.           
  35.         /** Called when the activity is first created. */  
  36.         @Override  
  37.         public void onCreate(Bundle savedInstanceState) {  
  38.             super.onCreate(savedInstanceState);  
  39.             setContentView(R.layout.main);  
  40.               
  41.             textView=(TextView)findViewById(R.id.txtview);  
  42.                
  43.         }  
  44.           
  45.         /** 
  46.          * 创建一个上下文可选菜单 
  47.          * Menu.add(int groupId, int itemId, int order, CharSequence title)方法, 
  48.          * 第一个参数用来指定菜单项分组,API文档说分组可以用来进行分组状态更新, 
  49.          * 第二个参数很重要,是菜单项的唯一ID,在后面菜单事件处理时要用到, 
  50.          * 第三个参数为排序值,用来指定菜单项顺序,可以无视, 
  51.          * 最后一个参数为菜单项的标题,在屏幕上面显示用。 
  52.          *  
  53.          * 另一种方式是使用XML文件和MenuInflater类来创建菜单。Android使用XML作为 
  54.          * 资源管理的方式,独立于编码,具有更高的灵活性和扩展性。在res下面建立menu 
  55.          * 文件夹,然后新建一个xml文档,命名为menu.xml。 
  56.          *  
  57.          */  
  58.         @Override  
  59.         public boolean onCreateOptionsMenu(Menu menu) {  
  60.             super.onCreateOptionsMenu(menu);  
  61.             //创建获取菜单的布局的对象  
  62.             MenuInflater menuInflater=new MenuInflater(this);  
  63.             //向菜单中添加菜单  
  64.             menuInflater.inflate(  
  65.                     R.menu.menu, //位于res/memnu下的菜单xml文件配置   
  66.                     menu  //需要添加的父菜单对象  
  67.                     );  
  68.             return true;  
  69.         }  
  70.         /** 
  71.          * 各个菜单的 响应时间的实现 
  72.          *  
  73.          */  
  74.         @Override  
  75.         public boolean onOptionsItemSelected(MenuItem item) {  
  76.             super.onOptionsItemSelected(item);  
  77.             switch (item.getItemId()) {  
  78.             //获取菜单项的ID,即前面Menu.add方法的第二个参数  
  79.             case R.id.ID_EDIT:  
  80.                 textView.setText("编辑");  
  81.                 break;  
  82.             case R.id.ID_SAVE:  
  83.                 textView.setText("保存");  
  84.                 break;  
  85.             case R.id.ID_DELETE:  
  86.                 textView.setText("删除");  
  87.                 break;  
  88.             default:  
  89.                 break;  
  90.             }  
  91.             return true;  
  92.         }  
  93.     } 
原文地址:https://www.cnblogs.com/shihao/p/2323695.html