Android菜单操作之创建并响应菜单
上一篇《学习理解Android菜单Menu操作》简单介绍了一下Android的菜单,今天让我们看一下如何通过代码创建和响应最常用的选项菜单(optionsmenu)。
一、创建optionsmenu
之前提到,Android的activity已经为我们提前创建好了android.view.Menu对象,并提供了回调方法onCreateOptionsMenu(Menumenu)供我们初始化菜单的内容。该方法只会在选项菜单第一次显示的时候被执行,如果你需要动态改变选项菜单的内容,请使用onPrepareOptionsMenu(Menu)。
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
//调用父类方法来加入系统菜单
//虽然目前android还没有系统菜单,但是为了兼容到以后的版本,最好加上
super.onCreateOptionsMenu(menu);
//添加菜单项(多种方式)
//1.直接指定标题
menu.add("菜单项1");
//2.通过资源指定标题
menu.add(R.string.menuitem2);
//3.显示指定菜单项的组号、ID、排序号、标题
menu.add(
1,//组号
Menu.FIRST,//唯一的ID号
Menu.FIRST,//排序号
"菜单项3");//标题
//如果希望显示菜单,请返回true
returntrue;
}
上面的代码演示了添加菜单项的3种方法,下面解释下第三种方法add(intgroupId,intitemId,intorder,CharSequencetitle)。其中,第一个参数是组号,android中你可以给菜单分组,以便快速地操作同一组的菜单。第二个参数指定每个菜单项的唯一ID号,你可以自己指定,也可以让系统来自动分配,在响应菜单时你需要通过ID号来判断哪个菜单被点击了。因此常规的做法是定义一些ID常量,但在android中有更好的方法,就是通过资源文件来引用,这个之后介绍。第三个参数代表菜单项显示顺序的编号,编号小的显示在前面。
二、给菜单项分组
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
super.onCreateOptionsMenu(menu);
//添加4个菜单项,分成2组
intgroup1=1;
intgourp2=2;
menu.add(group1,1,1,"item1");
menu.add(group1,2,2,"item2");
menu.add(gourp2,3,3,"item3");
menu.add(gourp2,4,4,"item4");
//显示菜单
returntrue;
}
你可以向上面这样给菜单项分组,分组之后就能使用menu中提供的方法对组进行操作了,如下:
menu.removeGroup(group1);//删除一组菜单 menu.setGroupVisible(gourp2,visible);//设置一组菜单是否可见 menu.setGroupEnabled(gourp2,enabled);//设置一组菜单是否可点 menu.setGroupCheckable(gourp2,checkable,exclusive);//设置一组菜单的勾选情况
三、响应菜单项
android提供了多种响应菜单项的方式,下面一一介绍
1、通过onOptionsItemSelected方法
使用的最多方法是重写activity类的onOptionsItemSelected(MenuItem)回调方法,每当有菜单项被点击时,android就会调用该方法,并传入被点击菜单项。
@Override
publicbooleanonOptionsItemSelected(MenuItemitem){
switch(item.getItemId()){
//响应每个菜单项(通过菜单项的ID)
case1:
//dosomethinghere
break;
case2:
//dosomethinghere
break;
case3:
//dosomethinghere
break;
case4:
//dosomethinghere
break;
default:
//对没有处理的事件,交给父类来处理
returnsuper.onOptionsItemSelected(item);
}
//返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了
returntrue;
}
以上代码可作为使用onOptionsItemSelected方法响应菜单的模板来使用,这里为了方便起见将菜单ID硬编码在程序里,你可以使用常量或资源ID来使代码更健壮。
2.使用监听器
虽然第一种方法是推荐使用的方法,android还是提供了类似javaswing的监听器方式来响应菜单。使用监听器的方式分为两步:
//第一步:创建监听器类
classMyMenuItemClickListenerimplementsOnMenuItemClickListener{
@Override
publicbooleanonMenuItemClick(MenuItemitem){
//dosomethinghere...
returntrue;//finishhandling
}
}
//第二步:为菜单项注册监听器
menuItem.setOnMenuItemClickListener(newMyMenuItemClickListener());
android文档对onMenuItemClick(MenuItemitem)回调方法的说明是"Calledwhenamenuitemhasbeeninvoked.Thisisthefirstcodethatisexecuted;ifitreturnstrue,noothercallbackswillbeexecuted."可见该方法先于onOptionsItemSelected执行。
3.使用Intent响应菜单
第3种方式是直接在MenuItem上调用setIntent(Intentintent)方法,这样android会自动在该菜单被点击时调用startActivity(Intent)。但是个人认为与其这样还不如直接在onOptionsItemSelected的case里手动调用startActivity(Intent)来的直观。
结语
本文详细介绍了如何创建和响应选项菜单,下一篇《Android菜单操作之SubMenu和IconMenu》将继续介绍子菜单和图标菜单的使用,大家继续关注哦。