Android一共有三种形式的菜单:
            1.选项菜单(optinosMenu)
            2.上下文菜单(ContextMenu)
            3.子菜单(subMenu)
其中最常用的就是选项菜单(optionsMenu), 该菜单在点击 menu 按键 后会在对应的Activity底部显示出来。

1.Activity菜单机制 (与dialog类似)
Activity有一套机制来实现对菜单的管理,方法如下:
   1.public boolean onCreateOptionsMenu(Menu menu)
             此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例。
              返回true则显示该menu,false 则不显示;
              
(只会在第一次初始化菜单时调用)

           2.public boolean 
onPrepareOptionsMenu(Menu menu)
             在
onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单显示前被调用。
              同样的, 返回true则显示该menu,false 则不显示;
             (可以通过此方法动态的改变菜单的状态,比如加载不同的菜单等)

           3.public void onOptionsMenuClosed(Menu menu)
              每次菜单被关闭时调用.
              
菜单被关闭有三种情形,menu按钮被再次点击、back按钮被点击或者用户选择了某一个菜单项)
              
            4.public boolean onOptionsItemSelected(MenuItem item)
               菜单项被点击时调用,也就是菜单项的监听方法。
              
          通过这几个方法,可以得知,对于Activity,同一时间只能显示和监听一个Menu 对象。


  2. 添加菜单:

      可以在onCreateOptionsMenu或者onPrepareOptionsMenu方法中来添加菜单

      2.1代码添加:
        menu.add((int groupId, int itemId, int order, charsequence title) .setIcon(drawable ID)

add()方法的四个参数,依次是:

1、组别,如果不分组的话就写Menu.NONE,

2、Id,这个很重要,Android根据这个Id来确定不同的菜单

3、顺序,哪个菜单项在前面由这个参数的大小决定

4、文本,菜单项的显示文本

add()方法返回的是MenuItem对象,调用其setIcon()方法,为相应MenuItem设置Icon

示例:
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(Menu.NONE, Menu.First+1, 0, "设置").setIcon(R.drawable.setting);
        return true;
    }
      
      2.2布局文件添加:
         
       getMenuInflater().inflate(R.menu.options_menu, menu);

调用Activity的getMenuInflater()得到一个MenuInflater, 
       使用inflate方法来把布局文件中的定义的菜单 加载给 第二个参数所对应的menu对象

示例:
     @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.options_menu, menu);
        return true;
    }

布局文件:
      在res目录下建立一个menu文件夹,并创建布局文件: options_menu.xml 
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_setting" android:title="设置" android:icon="@drawable/setting"></item>
    </menu>

   3.菜单项监听:
    只要菜单中的菜单项被点击,都会触发onOptionsItemSelected(MenuItem item)
    item参数即为被点击的菜单项,那么需要在此方法内判断哪个Item被点击了,从而实现不同的操作。
    对于两种不同的添加菜单方法,判断的方法有一点区别,但本质是一样的。

    3.1代码添加菜单的判断方法
     @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch(item.getItemId())//得到被点击的item的itemId
        {
        case Menu.First+1: //对应的ID就是在add方法中所设定的Id
            break;
        case Menu.First+2:
            break;
        }
        return true;
    }

  3.2布局文件添加菜单的判断方法:
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch(item.getItemId())//得到被点击的item的itemId
        {
        case R.id.menu_setting://这里的Id就是布局文件中定义的Id,在用R.id.XXX的方法获取出来
            break;
        case R.id.menu_info:
            break;
        }
        return true;
    }

Android的onCreateOptionsMenu()创建菜单Menu详解的更多相关文章

  1. Android的onCreateOptionsMenu()创建菜单Menu详解(转)

    Android一共有三种形式的菜单:            1.选项菜单(optinosMenu)            2.上下文菜单(ContextMenu)            3.子菜单(s ...

  2. 【转】Android的onCreateOptionsMenu()创建菜单Menu详解

    原文网址:http://www.linuxidc.com/Linux/2012-02/55500.htm Android一共有三种形式的菜单:            1.选项菜单(optinosMen ...

  3. Android的onCreateOptionsMenu()创建菜单Menu

    android一共有三种形式的菜单:             1.选项菜单(optinosMenu)             2.上下文菜单(ContextMenu)             3.子菜 ...

  4. [置顶] xamarin android toolbar(踩坑完全入门详解)

    网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...

  5. iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例

    使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWRevealViewController实现侧边菜单功能: 1.使用StoryBoard实现   2.纯代 ...

  6. Android EventBus 3.0 实例使用详解

    EventBus的使用和原理在网上有很多的博客了,其中泓洋大哥和启舰写的非常非常棒,我也是跟着他们的博客学会的EventBus,因为是第一次接触并使用EventBus,所以我写的更多是如何使用,源码解 ...

  7. Android 应用程序之间内容分享详解(二)

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9428613 Android 应用程序之间内容分享详解(一) 之前给大家分享了你开发的应 ...

  8. VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)

    上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很常用很重要的控件.本节开始鸡啄米将为大家讲解菜单的概念及使用. 菜单简介 菜单在界面设计中 ...

  9. Android 多线程之IntentService 完全详解

    关联文章: Android 多线程之HandlerThread 完全详解 Android 多线程之IntentService 完全详解 android多线程-AsyncTask之工作原理深入解析(上) ...

随机推荐

  1. 部分android手机CCEditBox输入之后键盘输入框不消失得问题

    用小米2s做登录界面时,用到CCEditBOx,输入完之后,键盘可以移下去,但是屏幕上还是显示得键盘自己得输入框,这时点击屏幕任何位置都无法把输入框干掉. 为什么ios上就没有这些android得琐碎 ...

  2. R6010 -abort() has been called

    版权所有,转载请注明出处. R6010 -abort() has been called 环境: Windows7 旗舰版 64Bit Visual studio 2012 编译32Bit运行程序 E ...

  3. EASYRECOVERY_3.3.29包含注册机、都教授数据恢复含注册码

    用EASYRECOVERY恢复过U盘,和回收站永久清空的东西.效果很好.但疑惑doc,docx,后者恢复效果特别好 都教授没用过,别人买的,没用,很贵. 每次用,都找不着,还要重新淘宝买.这次分享给大 ...

  4. FreeBSD基金会添加新成员,梁莉成为第一位来自微软和中国的基金会董事

    这个月23日FreeBSD基金会很高兴地宣布Philip Paeps和Kylie Liang (梁莉)正式加入董事会. 梁莉,现任微软开源技术部高级项目经理,主要负责FreeBSD在公有云以及私有云的 ...

  5. Java Super 覆盖方法

    子类从父类中继承方法,有时候,子类需要修改父类中定义的方法的实现,这称作方法覆盖. 比如,GeometricObject类中的toString方法返回表示集合对象的字符串,这个方法就可以被覆盖,返回表 ...

  6. What books does Bjarne Stroustrup suggest to master C++?

    QUESTION : What books does Bjarne Stroustrup suggest to master C++? ANSWER: A Tour of C++ is a quick ...

  7. Matlab位运算操作

    本文为转载他人文章: bitand 按位与操作 a = 7; b = bitand(10,a); disp(dec2bin(a,8)); %ans = 00000111 disp(dec2bin(b, ...

  8. 67. Add Binary

    public class Solution { public String addBinary(String a, String b) { char[] aa=a.toCharArray(); cha ...

  9. Educational Codeforces Round 15 B

    B. Powers of Two time limit per test 3 seconds memory limit per test 256 megabytes input standard in ...

  10. Container ViewController初探1

    今天调试程序遇到个问题,iOS7下在弹出Modal的子界面时,弹出层次不对,键盘和界面被分割在了Window的两侧,导致显示异常Presenting view controllers on detac ...