Android菜单操作之创建并响应菜单

 更新时间:2016年04月17日 17:04:12   作者:CodingMyWorld  
这篇文章主要介绍了Android菜单操作之创建并响应菜单的相关资料,如何使用代码创建菜单项,给菜单项分组,及各种响应菜单事件的方法,需要的朋友可以参考下

上一篇《学习理解Android菜单Menu操作》简单介绍了一下Android的菜单,今天让我们看一下如何通过代码创建和响应最常用的选项菜单(options menu)。

一、创建options menu

之前提到,Android的activity已经为我们提前创建好了android.view.Menu对象,并提供了回调方法onCreateOptionsMenu(Menu menu)供我们初始化菜单的内容。该方法只会在选项菜单第一次显示的时候被执行,如果你需要动态改变选项菜单的内容,请使用 onPrepareOptionsMenu(Menu)。

@Override
publicboolean onCreateOptionsMenu(Menu menu) {
 // 调用父类方法来加入系统菜单
 // 虽然目前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(int groupId, int itemId, int order, CharSequence title)。其中,第一个参数是组号,android中你可以给菜单分组,以便快速地操作同一组的菜单。第二个参数指定每个菜单项的唯一ID号,你可以自己指定,也可以让系统来自动分配,在响应菜单时你需要通过ID号来判断哪个菜单被点击了。因此常规的做法是定义一些ID常量,但在android中有更好的方法,就是通过资源文件来引用,这个之后介绍。第三个参数代表菜单项显示顺序的编号,编号小的显示在前面。

二、给菜单项分组

@Override
publicboolean onCreateOptionsMenu(Menu menu) {
 super.onCreateOptionsMenu(menu);
 // 添加4个菜单项,分成2组
int group1 =1;
 int gourp2 =2;
 menu.add(group1, 1, 1, "item 1");
 menu.add(group1, 2, 2, "item 2");
 menu.add(gourp2, 3, 3, "item 3");
 menu.add(gourp2, 4, 4, "item 4");
 // 显示菜单
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
publicboolean onOptionsItemSelected(MenuItem item) {
 switch (item.getItemId()) {
 //响应每个菜单项(通过菜单项的ID)
case1:
 // do something here
break;
 case2:
 // do something here
break;
 case3:
 // do something here
break;
 case4:
 // do something here
break;
 default:
 //对没有处理的事件,交给父类来处理
returnsuper.onOptionsItemSelected(item);
 }
 //返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了
returntrue;
}

以上代码可作为使用onOptionsItemSelected方法响应菜单的模板来使用,这里为了方便起见将菜单ID硬编码在程序里,你可以使用常量或资源ID来使代码更健壮。

2.使用监听器
虽然第一种方法是推荐使用的方法,android还是提供了类似java swing的监听器方式来响应菜单。使用监听器的方式分为两步:

//第一步:创建监听器类
class MyMenuItemClickListener implements OnMenuItemClickListener {
 @Override
 publicboolean onMenuItemClick(MenuItem item) {
 // do something here...
returntrue; //finish handling
 }
}

//第二步:为菜单项注册监听器
menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());

 android文档对onMenuItemClick(MenuItem item)回调方法的说明是"Called when a menu item has been invoked. This is the first code that is executed; if it returns true, no other callbacks will be executed." 可见该方法先于onOptionsItemSelected执行。

3.使用Intent响应菜单
第3种方式是直接在MenuItem上调用setIntent(Intent intent)方法,这样android会自动在该菜单被点击时调用 startActivity(Intent)。但是个人认为与其这样还不如直接在onOptionsItemSelected的case里手动调用 startActivity(Intent)来的直观。

结语

本文详细介绍了如何创建和响应选项菜单,下一篇《Android菜单操作之SubMenu和IconMenu》将继续介绍子菜单和图标菜单的使用,大家继续关注哦。

相关文章

  • Android自定义实现BaseAdapter的普通实现

    Android自定义实现BaseAdapter的普通实现

    这篇文章主要为大家详细介绍了Android自定义实现BaseAdapter的普通实现,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android N多窗口支持

    Android N多窗口支持

    Android N 可以同时显示多个应用窗口。在手机上,两个应用可以在“分屏”模式中左右并排或上下并排显示。本文将对此介绍。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • Android跳转系统设置Settings的各个界面详解

    Android跳转系统设置Settings的各个界面详解

    系统设置Settings中定义的一些常用的各界面ACTION常量,下面这篇文章主要给大家介绍了关于Android跳转系统设置Settings的各个界面,文中介绍非常详细,需要的朋友可以参考下
    2023-01-01
  • Android Studio中的Gradle依赖深入讲解

    Android Studio中的Gradle依赖深入讲解

    Android Studio由于使用了gradle的进行项目构建,使我们开发app方便很多,下面这篇文章主要给大家介绍了关于Android Studio中Gradle依赖的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-09-09
  • Android如何添加控件监听器(三种方式)

    Android如何添加控件监听器(三种方式)

    本文主要介绍了Android如何添加控件监听器(三种方式),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • flutter 自定义card阴影效果及card使用

    flutter 自定义card阴影效果及card使用

    这篇文章主要介绍了flutter 自定义card阴影效果及card使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Android 简单的实现滑块拼图验证码功能

    Android 简单的实现滑块拼图验证码功能

    这篇文章主要介绍了Android 简单的实现滑块拼图验证码功能,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-03-03
  • Android显示全文折叠控件使用方法详解

    Android显示全文折叠控件使用方法详解

    这篇文章主要为大家详细介绍了Android显示全文折叠控件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Android官方的侧滑控件DrawerLayout的示例代码

    Android官方的侧滑控件DrawerLayout的示例代码

    这篇文章主要介绍了Android官方的侧滑控件DrawerLayout的示例代码,非常具有实用价值,需要的朋友可以参考下
    2017-09-09
  • 简介Android 中的AsyncTask

    简介Android 中的AsyncTask

    AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合。接下来通过本文给大家介绍Android 中的AsyncTask,感兴趣的朋友一起学习吧
    2016-03-03

最新评论