Android用户界面的组成除了View外,还包括菜单和对话框,本节我们先来学习一下菜单的使用方法。
菜单Menu是Android用户界面中最常见的元素之一,使用非常频繁。Android菜单主要分为三类:选项菜单(Options Menu)、上下文菜单(Context Menu)、子菜单(Submenu)。
一、选项菜单和子菜单
一个Menu对象代表一个菜单,Menu中可添加菜单项MenuItem,也可以添加子菜单SubMenu。
Java代码
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // TODO Auto-generated method stub
- //添加性别子菜单
- SubMenu subMenuGender=menu.addSubMenu(MAIN_GROUP, MENU_GENDER, 0,"性别");
- subMenuGender.setIcon(R.drawable.gender);
- subMenuGender.setHeaderIcon(R.drawable.gender);
- male=subMenuGender.add(GENDER_GROUP,MENU_GENDER_MALE, 0, "男");//为子菜单添加选项
- male.setChecked(true);//设置默认选项
- subMenuGender.add(GENDER_GROUP,MENU_GENDER_FEMALE, 0, "女");//为子菜单添加选项
- subMenuGender.setGroupCheckable(GENDER_GROUP, true, true);//设置GENDER_GROUP组是可选的、互斥的
- //添加兴趣子菜单
- SubMenu subMenuHobby=menu.addSubMenu(MAIN_GROUP, MENU_HOBBY, 1, "爱好");
- subMenuHobby.setIcon(R.drawable.hobby);
- miaHobby[0]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY1, 0, "游泳");
- miaHobby[1]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY2, 1, "篮球");
- miaHobby[2]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY3, 2, "跑步");
- miaHobby[0].setCheckable(true);
- miaHobby[1].setCheckable(true);
- miaHobby[2].setCheckable(true);//设置为可多选
- MenuItem ok=menu.add(MAIN_GROUP, MENU_OK, 3, "确定");//为主菜单添加选项菜单
- OnMenuItemClickListener lsn=new OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- // TODO Auto-generated method stub
- appendStateStr();
- return true;
- }
- };
- ok.setOnMenuItemClickListener(lsn);
- ok.setAlphabeticShortcut('o');//给确定菜单设置字符快捷键
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // TODO Auto-generated method stub
- switch(item.getItemId()){
- case MENU_GENDER_MALE:
- case MENU_GENDER_FEMALE:
- item.setChecked(true);
- appendStateStr();
- break;
- case MENU_HOBBY1:
- case MENU_HOBBY2:
- case MENU_HOBBY3:
- item.setChecked(!item.isChecked());
- appendStateStr();
- break;
- }
- return true;
- }
- private void appendStateStr() {
- // TODO Auto-generated method stub
- String result="您选择的性别是:";
- if(male.isChecked()){
- result+="男";
- }else{
- result+="女";
- }
- String hobbyStr="";
- for(MenuItem mi:miaHobby){
- if(mi.isChecked()){
- hobbyStr+=mi.getTitle()+"、";
- }
- }
- if(hobbyStr.length()>0){
- result+=",您的爱好为:"+hobbyStr.substring(0,hobbyStr.length()-1)+".\n";
- }else{
- resultresult=result+".\n";
- }
- Toast.makeText(mainActivity.this, result, Toast.LENGTH_LONG).show();
- }
下面是此程序运行的结果,大家可以对照着代码观察效果:
二、上下文菜单
上下文菜单是注册到某个View对象上的,如果一个View对象注册了上下文菜单,用户可通过长按该View对象弹出上下文菜单.
首先在onCreateContextMenu中为不同空间配置不同的上下文菜单:
Java代码
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- // TODO Auto-generated method stub
- super.onCreateContextMenu(menu, v, menuInfo);
- menu.setHeaderIcon(R.drawable.bird);
- if(v==findViewById(R.id.editview01)){
- menu.add(0,1,0,"菜单项1");
- menu.add(0,2,0,"菜单项2");
- menu.add(0,3,0,"菜单项3");
- }else if(v==findViewById(R.id.editview02)){
- menu.add(0,4,0,"菜单项4");
- menu.add(0,5,0,"菜单项5");
- }
- }
在onCreate方法中为两个文本框注册上下文菜单:
Java代码
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- this.registerForContextMenu(findViewById(R.id.editview01));
- this.registerForContextMenu(findViewById(R.id.editview02));
- }
添加上下文菜单监听事件:
Java代码
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- // TODO Auto-generated method stub
- switch(item.getItemId()){
- case 1:
- case 2:
- case 3:
- Toast.makeText(mainActivity.this, "这是第一个EditView的上下文菜单"+item.getTitle(), Toast.LENGTH_LONG).show();
- case 4:
- case 5:
- Toast.makeText(mainActivity.this, "这是第二个EditView的上下文菜单"+item.getTitle(), Toast.LENGTH_LONG).show();
- }
- return super.onContextItemSelected(item);
- }
下面两图是Android上下文菜单实例的运行效果:
通过三种Android菜单的详细讲解,大家应该对菜单的使用有所了解了,在以后的Android开发过程中可以多熟悉下。
本文发布:Android开发网
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。