zoukankan      html  css  js  c++  java
  • 在Android应用中定制菜单

    转自:http://oxen.javaeye.com/blog/142126

      通过Android提供的NotePad示例应用,及帮助文档中对菜单的相关描述,现将如何在我们的Androiod应用中定制我们自己的菜单,做一个小结。

     

    一、菜单的生成

        对一个Android应用中的每一个屏幕,也就是说,对每一个Activity类,都会拥有一个默认菜单。在Activity类中,定义了几个与菜单有关的方法,供继承于Activity类的子类去重载,从而定制我们自己的菜单。这几个方法为:

    public boolean onCreateOptionsMenu(android.view.Menu menu);

    public boolean onPrepareOptionsMenu(android.view.Menu menu);

    public boolean onOptionsItemSelected(android.view.MenuItem item);

      为了生成我们自己的菜单,Android为我们提供了两个时机点。当在Activity类实例启动时,我们可以通过重载onCreateOptionsMenu()来定制我们的菜单;另外,也可以在菜单每次被调用时,对菜单中的项重新生成,通过重载onPrepareOptionsMenu来实现。对于第二种方式,由于每次调用时都要重新生成,对于那些不经常变化的菜单,效率就会比较低。看下面的代码:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       super.onCreateOptionsMenu(menu);
       menu.add(0, 0, “菜单项一”);
       menu.add(0, 1, “菜单项二”);
       menu.add(0, 2, “菜单项三”);
       return true;
    }

        Menu.add()方法第一个参数表示给这个新增的菜单项分配一个分组号;第二个参数表示给这个新增的菜单项分配一个唯一标识id;第三个参数为菜单项的标题。

        我们可以通过调用Menu.setItemShown()或者Menu.setGroupShown()方法来显示或隐藏一些菜单项。

        这里要注意的一个地方是:菜单项的显示顺序是按代码中添加的顺序来的,也就是说Menu.add()方法只能在菜单的最后面新增一个菜单项。另外,第一个参数的分组标识,不会改变菜单项的显示顺序。
    二、响应菜单项点击

       当菜单显示出来后,用户点击菜单中的某一菜单项,我们的菜单需要响应这个点击事件。这个也很简单,通过重载onOptionsItemSelected()方法来实现,直接上例子:

    @Override
    public boolean onOptionsItemSelected(Menu.Item item){
       switch (item.getId()) {
       case 0:
           showAlert(”Menu Item Clicked”, “菜单项一”, “ok”, null, false, null);
           return true;
       case 1:
           showAlert(”Menu Item Clicked”, “菜单项二”, “ok”, null, false, null);
           return true;
       case 2:
           showAlert(”Menu Item Clicked”, “菜单项三”, “ok”, null, false, null);
           return true;
       }
       return false;
    }

        这里,我们还可以通过调用Item.setAlphabeticShortcut()或Item.setNumericShortcut()方法来增加菜单项的快捷键操作。

        对响应菜单项点击,还有另一个办法,可以通过实现Runnable类()的一个子类,做为消息句柄来对菜单项点击做响应,但这种办法效率较低,不推荐这么做。

    三、增加子菜单

        我们还可以通过调用Menu.addSubMenu()方法,为某个菜单项添加子菜单,这个方法返回一个SubMenu实例,我们可以在这个SubMenu菜单中添加子菜单项。

        注:菜单只能有一级子菜单,不支持多级。

  • 相关阅读:
    【拓扑排序】【堆】CH Round #57
    【数论】【筛法求素数】【欧拉函数】bzoj2818 Gcd
    【数论】【枚举约数】【欧拉函数】bzoj2705 [SDOI2012]Longge的问题
    【暴力】vijos P1897 学姐吃牛排
    【kruscal】【最小生成树】【并查集扩展】bzoj3714 [PA2014]Kuglarz
    【set】bzoj2761 [JLOI2011]不重复数字
    【尺取法】【Multiset】bzoj1342 [Baltic2007]Sound静音问题
    【神奇の做法】bzoj2456 mode
    【博弈论】bzoj2463 [中山市选2009]谁能赢呢?
    【set】bzoj3715 [PA2014]Lustra
  • 原文地址:https://www.cnblogs.com/leon19870907/p/1998120.html
Copyright © 2011-2022 走看看