Android用户界面的组成除了View外,还包括菜单和对话框,本节我们先来学习一下菜单的使用方法。

       菜单Menu是Android用户界面中最常见的元素之一,使用非常频繁。Android菜单主要分为三类:选项菜单(Options Menu)、上下文菜单(Context Menu)、子菜单(Submenu)。

       一、选项菜单和子菜单

       一个Menu对象代表一个菜单,Menu中可添加菜单项MenuItem,也可以添加子菜单SubMenu。

Java代码
  1. @Override      
  2. public void onCreate(Bundle savedInstanceState) {      
  3.      super.onCreate(savedInstanceState);      
  4.      setContentView(R.layout.main);      
  5. }      
  6.      
  7. @Override      
  8. public boolean onCreateOptionsMenu(Menu menu) {      
  9.     // TODO Auto-generated method stub      
  10.     //添加性别子菜单      
  11.     SubMenu subMenuGender=menu.addSubMenu(MAIN_GROUP, MENU_GENDER, 0,"性别");      
  12.    subMenuGender.setIcon(R.drawable.gender);      
  13.    subMenuGender.setHeaderIcon(R.drawable.gender);      
  14.    male=subMenuGender.add(GENDER_GROUP,MENU_GENDER_MALE, 0"男");//为子菜单添加选项      
  15.    male.setChecked(true);//设置默认选项      
  16.    subMenuGender.add(GENDER_GROUP,MENU_GENDER_FEMALE, 0"女");//为子菜单添加选项      
  17.    subMenuGender.setGroupCheckable(GENDER_GROUP, truetrue);//设置GENDER_GROUP组是可选的、互斥的      
  18.               
  19.    //添加兴趣子菜单      
  20.    SubMenu subMenuHobby=menu.addSubMenu(MAIN_GROUP, MENU_HOBBY, 1"爱好");      
  21.    subMenuHobby.setIcon(R.drawable.hobby);      
  22.    miaHobby[0]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY1, 0"游泳");      
  23.    miaHobby[1]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY2, 1"篮球");      
  24.    miaHobby[2]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY3, 2"跑步");      
  25.    miaHobby[0].setCheckable(true);      
  26.    miaHobby[1].setCheckable(true);      
  27.    miaHobby[2].setCheckable(true);//设置为可多选      
  28.               
  29.    MenuItem ok=menu.add(MAIN_GROUP, MENU_OK, 3"确定");//为主菜单添加选项菜单      
  30.    OnMenuItemClickListener lsn=new OnMenuItemClickListener() {      
  31.                   
  32.         @Override      
  33.         public boolean onMenuItemClick(MenuItem item) {      
  34.             // TODO Auto-generated method stub      
  35.             appendStateStr();      
  36.             return true;      
  37.         }      
  38.     };      
  39.     ok.setOnMenuItemClickListener(lsn);      
  40.     ok.setAlphabeticShortcut('o');//给确定菜单设置字符快捷键      
  41.      return true;      
  42. }      
  43.      
  44. @Override      
  45. public boolean onOptionsItemSelected(MenuItem item) {      
  46.     // TODO Auto-generated method stub      
  47.     switch(item.getItemId()){      
  48.     case MENU_GENDER_MALE:      
  49.     case MENU_GENDER_FEMALE:      
  50.         item.setChecked(true);      
  51.         appendStateStr();      
  52.         break;      
  53.     case MENU_HOBBY1:      
  54.     case MENU_HOBBY2:      
  55.     case MENU_HOBBY3:      
  56.         item.setChecked(!item.isChecked());      
  57.         appendStateStr();      
  58.         break;      
  59.     }      
  60.     return true;      
  61. }      
  62.      
  63. private void appendStateStr() {      
  64.     // TODO Auto-generated method stub      
  65.     String result="您选择的性别是:";      
  66.     if(male.isChecked()){      
  67.         result+="男";      
  68.     }else{      
  69.         result+="女";      
  70.     }      
  71.     String hobbyStr="";      
  72.     for(MenuItem mi:miaHobby){      
  73.         if(mi.isChecked()){      
  74.             hobbyStr+=mi.getTitle()+"、";      
  75.         }      
  76.     }      
  77.     if(hobbyStr.length()>0){      
  78.         result+=",您的爱好为:"+hobbyStr.substring(0,hobbyStr.length()-1)+".\n";      
  79.     }else{      
  80.         resultresult=result+".\n";      
  81.     }      
  82.     Toast.makeText(mainActivity.this, result, Toast.LENGTH_LONG).show();      
  83. }    

       下面是此程序运行的结果,大家可以对照着代码观察效果:

Android选项菜单Options Menu

Android子菜单Submenu

Android子菜单Submenu

Android菜单操作结果

       二、上下文菜单

       上下文菜单是注册到某个View对象上的,如果一个View对象注册了上下文菜单,用户可通过长按该View对象弹出上下文菜单.

       首先在onCreateContextMenu中为不同空间配置不同的上下文菜单:

Java代码
  1. @Override  
  2. public void onCreateContextMenu(ContextMenu menu, View v,   
  3.         ContextMenuInfo menuInfo) {   
  4.     // TODO Auto-generated method stub   
  5.     super.onCreateContextMenu(menu, v, menuInfo);   
  6.     menu.setHeaderIcon(R.drawable.bird);   
  7.     if(v==findViewById(R.id.editview01)){   
  8.         menu.add(0,1,0,"菜单项1");   
  9.         menu.add(0,2,0,"菜单项2");   
  10.         menu.add(0,3,0,"菜单项3");   
  11.     }else if(v==findViewById(R.id.editview02)){   
  12.         menu.add(0,4,0,"菜单项4");   
  13.         menu.add(0,5,0,"菜单项5");   
  14.     }   
  15. }  

       在onCreate方法中为两个文本框注册上下文菜单:

Java代码
  1. @Override  
  2. public void onCreate(Bundle savedInstanceState) {   
  3.     super.onCreate(savedInstanceState);   
  4.     setContentView(R.layout.main);   
  5.     this.registerForContextMenu(findViewById(R.id.editview01));   
  6.     this.registerForContextMenu(findViewById(R.id.editview02));   
  7. }

       添加上下文菜单监听事件:

Java代码
  1. @Override  
  2. public boolean onContextItemSelected(MenuItem item) {   
  3.     // TODO Auto-generated method stub   
  4.     switch(item.getItemId()){   
  5.     case 1:   
  6.     case 2:   
  7.     case 3:   
  8.         Toast.makeText(mainActivity.this"这是第一个EditView的上下文菜单"+item.getTitle(), Toast.LENGTH_LONG).show();   
  9.     case 4:   
  10.     case 5:   
  11.         Toast.makeText(mainActivity.this"这是第二个EditView的上下文菜单"+item.getTitle(), Toast.LENGTH_LONG).show();   
  12.                
  13.     }   
  14.     return super.onContextItemSelected(item);   
  15. }  

      下面两图是Android上下文菜单实例的运行效果:

 Android上下文菜单Context Menu

Android上下文菜单操作结果

       通过三种Android菜单的详细讲解,大家应该对菜单的使用有所了解了,在以后的Android开发过程中可以多熟悉下。

本文发布:Android开发网
本文地址:http://www.teaching4real.com/android/course/125.html
2012年7月23日
发布:鸡啄米 分类:Android开发教程 浏览: 注册送白菜网:1