创建options menu

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

@Overridepublicboolean 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"); //标题

    // 如果希望显示菜单,请返回truereturntrue;}

********也可以******

public void onCreateOptionsMenu(Menu menu,MenuInflater inflater){

super.onCreateOptionsMenu(menu,inflater);

inflater.inflate(R.menu.fragment_crime_list,menu);

}

上面的代码演示了添加菜单项的3种方法,下面解释下第三种方法add(int groupId, int itemId, int order, CharSequence title)。其中,第一个参数是组号,android中你可以给菜单分组,以便快速地操作同一组的菜单。第二个参数指定每个菜单项的唯一ID号,你可以自己指定,也可以让系统来自动分配,在响应菜单时你需要通过ID号来判断哪个菜单被点击了。因此常规的做法是定义一些ID常量,但在android中有更好的方法,就是通过资源文件来引用,这个之后介绍。第三个参数代表菜单项显示顺序的编号,编号小的显示在前面。

给菜单项分组

@Overridepublicboolean 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就会调用该方法,并传入被点击菜单项。

@Overridepublicboolean onOptionsItemSelected(MenuItem item) {    switch (item.getItemId()) {    //响应每个菜单项(通过菜单项的ID)case1:        // do something herebreak;    case2:        // do something herebreak;    case3:        // do something herebreak;    case4:        // do something herebreak;    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)来的直观。

转载于:https://www.cnblogs.com/to-creat/p/5726759.html

Android创建并响应选项菜单相关推荐

  1. Android中创建和响应选项菜单

    计应112班 谭娇娇 这个是一个创建菜单和响应选项的一个实例同时也Android同样支持子菜单,你可以通过addSubMenu(int groupId, int itemId, int order, ...

  2. 【Android基础知识】选项菜单、上下文菜单、子菜单的使用

    Android菜单类型 菜单是为了增加更多的功能,不占用屏幕的空间.Android中菜单类型有三类,选项菜单(OptionMenu).上下文菜单(ContextMenu).子菜单(SubMenu),下 ...

  3. Android开发:Menu选项菜单

    创建选项菜单的步骤: 1.覆盖Activity的onCreateOptionsMenu(Menu menu)函数 2.调用menu的add()方法添加菜单项(MenuItem),调用MenuItem的 ...

  4. 系出名门Android(2) - 布局(Layout)和菜单(Menu)

    2019独角兽企业重金招聘Python工程师标准>>> 系出名门Android(2) - 布局(Layout)和菜单(Menu) 作者:webabcd 介绍 在 Android 中各 ...

  5. 选项菜单_上下文菜单_子菜单_图标菜单_自定义菜单_联系人标记弹出菜单

    菜单控件<Menu > 选项菜单(Option Menu) 单击Menu实体按钮弹出,android中把它叫做option menu 上下文菜单(ContextMenu 是Menu的子接口 ...

  6. Android开发系列(二十八):使用SubMenu创建选项菜单

    大部分手机上边都会有一个"MENU"键,在一个应用安装到手机上之后,能够通过"MENU"显示该应用关联的菜单. 可是,从Android 3.0開始,Androi ...

  7. Android之创建选项菜单

    1.在桌面程序中,菜单的应用非常广泛,但是在安卓手机开发中减少了菜单的使用,不过在安卓中提供了两种实现菜单的方法,一种是用Java代码创建菜单,一种是使用菜单资源文件创建菜单,在这里推荐第二种,使用菜 ...

  8. Android之选项菜单创建

    接下来我来讲一下菜单,菜单包括选项菜单(OptionMenu).上下文菜单(ContextMenu).子菜单(SubMenu). 先讲一下选项菜单: 直接上代码,在代码中我已经做注释了 在下一篇教程中 ...

  9. Android之选项菜单和上下文菜单解析

    选项菜单 创建选项菜单 Activity类的onCreateOptionMenu事件方法用来创建选项菜单,该方法定义如下: @Overridepublic boolean onCreateOption ...

  10. android的选项菜单,Android界面菜单(2)—选项菜单

    选项菜单 Android 4.0 系统中,Activity在创建时便会调用 onCreateOptionMenu() 函数初始化自身的菜单系统.在Activity的整个生命周期中,选项菜单是一直被重复 ...

最新文章

  1. Linux之DNS服务
  2. 【jquery模仿net控件】简单的datalist控件更新,及其简单应用
  3. amd一点也不yes_[电脑]AMD:环顾四周,我只能超越自己了?5900Xamp;5600X VS 3900X开箱体验...
  4. WebSocket 实战--转
  5. 模拟物流快递系统程序设计java_路辉物流设备:大件快递自动分拣系统的模块化设计...
  6. 编程实战一通讯录程序
  7. 微软Azure storage account的path值代表什么含义
  8. Scrapy-Link Extractors(链接提取器)
  9. 技术案例分享:WIPTEC采用Aruba边缘服务平台,实现物流配送生产自动化、精简生产力
  10. Android 系统性能优化(27)---内存分析工具
  11. Android 显示原理简介
  12. 1.4. 为现有的应用程序添加 Core Data 支持(Core Data 应用程序实践指南)
  13. 计算机原理实验的35h,微机原理及接口技术习题解答与实验指导
  14. java token 超时_前后端分离——token超时刷新策略
  15. CentOS Linux解决Device eth0 does not seem to be pres
  16. 人口各省预测模型matlab_基于MATLAB的人口预测模型
  17. cesium接入加载倾斜摄影(cesium篇.16)
  18. 金蝶未注册服务器win10,金蝶WIN10下异常问题解决方法
  19. QPainter 画扇形
  20. ApriTag2 检测方法

热门文章

  1. Silverlight 5 强袭 !! 圣临王者之三端大一统
  2. [经验]修改SDI主窗口Title
  3. HelloWorld入门程序
  4. re.findall的正则参数为什么不能包含元组表达式()或竖线符号,先挖个坑
  5. Transformers资料汇总,从概要到原理到应用
  6. 基于特定实体的文本情感分类总结(PART II)
  7. 【每日算法Day 73】学妹大半夜私聊我有空吗,然后竟然做出这种事!
  8. numpy—np.diag(v, k=0)
  9. 深度学习2.0-39.RNN训练难题-梯度弥散与梯度爆炸
  10. pytorch---pack_padded_sequence()与pad_packed_sequence()