Android有三种形式的菜单:选项菜单(optionMenu)、上下文菜单(ContextMenu)、子菜单(subMenu)。最常用的是选项菜单,该菜单在点击menu按键后会在对应的Activity底部显示出来。每个Activity关联一个且唯一的一个Menu对象。

  1.Activity的菜单机制(与dialog类似)

 一、 Activity有一套机制来实现对菜单的管理,方法如下:

  1.public boolean onCreateOptionMenu(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)

    菜单项被点击时调用,也就是菜单项的监听方法。

 二、添加选项菜单

    可以在onCreateOptionMenu或者onPrepareOptionsMenu方法中添加选项菜单

    通过此方法来添加:menu.add(int groupId,int itemId,int order,charsequence title).setIcon(drawable id)

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

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

    2.ID, Android根据这个ID来确定不同的菜单,通常以Menu.FIRST作为偏移量基准。

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

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

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

 三、添加布局文件

   getMenuInflater().inflate(R.menu.options_menu,Menu menu);

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

   布局文件:

    在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>

 四、菜单项监听:

   只要菜单中的菜单项被点击,都会触发onOptionsItemSelected(MenuItem item)

   item参数即为被点击的菜单项,需要在此方法内判断哪个Item被点击了,从而实现不同的操作。对于上面(二、三)两种不同添加菜单的方法,判断的方法有一点区别,但本质是一样的。

  1.代码添加菜单的判断方法

 public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()//得到被点击的item的itemId
{
case Menu.First:
......
break;
case Menu.First+1:
......
break;
default:
//对没有处理的事件,交给父类来处理
return super.onOptionsItemSelected(item);
}
    //返回true表示处理完菜单项的事件了,不需要将该事件继续传播下去了   
return true; }

    2.布局文件添加菜单的判断方法:

    只需将上面的代码中的case之后的int值改为布局文件中定义的id即可。例如:case R.id.menu.setting:   case  R.id.menu_info:

以上主要参考自:http://www.linuxidc.com/Linux/2012-02/55500.htm

Menu之选项菜单的更多相关文章

  1. 安卓开发笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)

    菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 菜单的实现 ...

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

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

  3. Android开发之Menu:OptionMenu(选项菜单)、ContextMenu(上下文菜单)、SubMenu(子菜单)

    菜单的概念,现在已经很普及了.Windows系统.Mac.桌面版Linux.Java Swing等,都有可视化菜单.一.Android平台3种菜单  选项菜单(OptionMenu).上下文菜单(Co ...

  4. 安卓开发_浅谈OptionsMenus(选项菜单)

    Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开 ...

  5. Android-操作栏之选项菜单

    回答第一个问题:什么是选项菜单?答:选项菜单就是可以显示在操作栏上的菜单. 菜单的视图需要建立在res/menu下. 其中,showAsAction属性用于指定菜单选项是显示在操作栏还是隐藏到溢出菜单 ...

  6. Android开发 ---xml构建选项菜单、上下文菜单(长按显示菜单)、发通知、发送下载通知

    1.activity_main.xml 描述: 定义了一个TextView和三个按钮 <?xml version="1.0" encoding="utf-8&quo ...

  7. Android开发 ---代码创建选项菜单、隐藏菜单项、菜单的生命周期,菜单按钮图标设置、搜索框、xml中设置子菜单

    1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> < ...

  8. Android开发之选项菜单(optinosMenu)

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

  9. Android创建并响应选项菜单

    创建options menu 之前提到,Android的activity已经为我们提前创建好了android.view.Menu对象,并提供了回调方法onCreateOptionsMenu(Menu  ...

随机推荐

  1. haskell入门

    斯坦福公开课<编程范式>中介绍了Scheme(但是不仅仅是Scheme,它只是作为函数式语言的代表),最后一课介绍了Haskell... “Hello World!”是学习一门语言的魔咒 ...

  2. [GDKOI2016]小学生数学题

    记 $F(n)=\sum\limits_{i=1}^{n}i^{-1}$ $G(n)=\sum\limits_{i=1,i\neq jp}^{n}i^{-1}$ 我们要算$F(n)\%p^k$ 那么 ...

  3. C# 多线程经典示例 吃苹果

    本文主要讲述了多线程开发中经典示例,通过本示例,可以加深对多线程的理解. 示例概述: 下面用一个模拟吃苹果的实例,说明C#中多线程的实现方法.要求开发一个程序实现如下情况:一个家庭有三个孩子,爸爸妈妈 ...

  4. NET设计模式(2):单件模式(Singleton Pattern)[转载]

    单件模式(Singleton Pattern) ——.NET设计模式系列之二 Terrylee,2005年12月07日 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问 ...

  5. CSS padding margin border属性详解【转载】

    本文转载自:http://www.cnblogs.com/linjiqin/p/3556497.html ,感谢相关博主. 图解CSS padding.margin.border属性 W3C组织建议把 ...

  6. 在Eclipse中新建Maven项目

    关于Maven的好的资料: Apache官网:http://maven.apache.org/ Apache Maven 入门篇 ( 上 ):http://www.oracle.com/technet ...

  7. clang和gcc消除警告

    1. clang命令,它的作用是用来消除特定区域的clang的编译警告,-Wgnu则是消除?:警告, 例: #pragma clang diagnostic push #pragma clang di ...

  8. UITextView ios7

    UITextView *textView2 = [[UITextView alloc]initWithFrame:CGRectMake(, textView1.frame.size.height + ...

  9. HDU1863 畅通project 【最小生成树Prim】

    畅通project Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  10. Unity3D——窗体介绍

    这是本人第一次的Unity的博客,主要还是依据雨松MOMO的视频来进行的,由于感觉视频比較直观,对于入门比較快,再加上自己有对应的编程基础,如今看书的话效率不高,所以先看几个视频了解一下大体的流程,感 ...