zoukankan      html  css  js  c++  java
  • Android菜单详解(二)——创建并响应选项菜单

    Android菜单详解(二)——创建并响应选项菜单 - 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"); //标题
       
        // 如果希望显示菜单,请返回truereturntrue;
    }
    复制代码


    上面的代码演示了添加菜单项的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 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)来的直观。

    结语

    本文详细介绍了如何创建和响应选项菜单,下一篇《Android菜单详解(三)——SubMenu和IconMenu》将继续介绍子菜单和图标菜单的使用。

  • 相关阅读:
    基于OpenVINO的端到端DL网络-A Year in Computer Vision中关于图像增强系列部分
    基于OpenVINO的端到端DL网络-Tesseract5+VS2017+win10源码编译攻略
    基于OpenVINO的端到端DL网络-Intel AI DevCloud 的申请和登陆
    OpenCV和RTSP的综合研究
    基于OpenVINO的端到端DL网络-包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解【正确的目录添加方法】
    消除临时对象
    Redis数据导入工具优化过程总结
    清楚利弊,用好内联
    STL区间成员函数及区间算法总结
    高效的使用STL
  • 原文地址:https://www.cnblogs.com/seven1979/p/4364968.html
Copyright © 2011-2022 走看看