1.普通的Menu

在Activity中覆盖onCreateOptionsMenu(Menu menu)方法,该方法负责生产menu,它是一个回调函数,即当按下手机设备上的menubutton时Android系统才会生产菜单。

public boolean onCreateOptionsMenu(Menu menu) {

  //menu.add(arg0, arg1, arg2, arg3)给button加入一项菜单

  //第一个參数:分组的id,假设不用分组则设为0

  //第二个參数:menu中每一项的id,这个id应该是唯一的

  //第三个參数:排序的信息,依据这个字段的大小,menu对当中的项进行排序显示:小的排在前面

  //第四个參数:menu项的显示信息

  menu.add(0, MENU_ITEM_1, 0, "APPLE");

  menu.add(0, MENU_ITEM_2, 0, "ORANGE");

  return super.onCreateOptionsMenu(menu);

 }

假设要加入单击事件,则要覆盖onOptionsItemSelected(MenuItem item)方法。

public boolean onOptionsItemSelected(MenuItem item) {

  //通过id推断传来的item,这个id通过item.getItemId()得到

  switch(item.getItemId()){

  case MENU_ITEM_1:

   t = Toast.makeText(this, "you choose the apple", Toast.LENGTH_SHORT);

   t.show();

   break;

  case MENU_ITEM_2:

   t = Toast.makeText(this, "you choose the orange", Toast.LENGTH_SHORT);

   t.show();

   break;

  }

  return true;

 }

2.子菜单(SubMenu)

public boolean onCreateOptionsMenu(Menu menu) {

  menu.add(0, MENU_ITEM_1, 1, "APPLE");

  menu.add(0, MENU_ITEM_2, 2, "ORANGE");

//为menu创建SubMenu对象

  SubMenu subMenu = menu.addSubMenu(0, MENU_ITEM_3, 3, "BANANA");

//向subMenu中加入选项

  subMenu.add(0, 31, 31, "BIG BANANA");

  subMenu.add(0, 32, 32, "SMALL BANANA");

  return super.onCreateOptionsMenu(menu);

 }

3.上下文菜单(ContextMenu)——长按特定View后弹出的菜单

不论什么视图都能够注冊ContextMenu,但最常见的是用于列表视图ListView的item。

在onCreate方法中为View注冊ContextMenu。

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.contextmenu);

  btn1 = (Button)findViewById(R.id.btn1);

  btn2 = (Button)findViewById(R.id.btn2);

  //为Button注冊ContextMenu

  registerForContextMenu(btn1);

  registerForContextMenu(btn2);

 }

覆盖Activity的onCreateContenxtMenu()方法,调用Menu的add方法加入菜单项(MenuItem)

public void onCreateContextMenu(ContextMenu menu, View v,

   ContextMenuInfo menuInfo) {

   if(v==btn1){

//设置菜单标题

   menu.setHeaderTitle("this is the frist");

//加入菜单

   menu.add(0, 200, 0, "context menu 1");

   menu.add(0, 201, 0, "context menu 2");

  }

  if(v==btn2){

//设置菜单标题

   menu.setHeaderTitle("this is the second");

//加入菜单

   menu.add(0, 300, 0, "context menu 3");

   menu.add(0, 301, 0, "context menu 4");

  }

  super.onCreateContextMenu(menu, v, menuInfo);

 }

4.动态Menu

onPrepareOptionsMenu()在菜单列表即将显示出来时决定哪些菜单要显示哪些不显示,当然也能够做一些其它工作。

public boolean onPrepareOptionsMenu(Menu menu) {        

 String currentText = textview.getText().toString();        

 if("M".equals(currentText)){            

  //先清掉菜单 

  menu.clear();    

  //能够通过点击这个菜单项来改变textview的值,这样(变成N)就能够測试了

  MenuItem item = menu.add(0, 400, 401, "to N");

  //android自带的图标

  item.setIcon(android.R.drawable.alert_dark_frame);       

 }        

 if("N".equals(currentText)){            

  //先清掉菜单 

  menu.clear();   

  //能够通过点击这个菜单项来改变textview的值,这样(变成M)就能够測试了

  MenuItem item = menu.add(0, 401, 402, "to M");

  item.setIcon(android.R.drawable.alert_light_frame);        

 }      

 //如今共同拥有两个菜单子项

 menu.add(0, 402, 403, "Now is " + currentText);        

 return super.onPrepareOptionsMenu(menu);   

}

5.用XML文件方式创建Menu

在res/文件夹下建一个文件夹,名为menu,以下建一个xml文件,名为menu_xml_file.xml

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:id="@+id/grout_main">

    <item android:id="@+id/menu_1"

                android:title="This 1"/>

    <item android:id="@+id/menu_2" 

            android:title="This 2" /> 

</group>

</menu>

在Activity中覆盖onCreateOptionsMenu(Menu menu)方法

public boolean onCreateOptionsMenu(Menu menu) {

        //MenuInflater类用来实例化菜单XML文件成菜单对象

//获取当前菜单

        MenuInflater inflater = getMenuInflater();

        //inflate(int menuRes, Menu menu)填充菜单

//从一个指定的xml资源去填充菜单,假设有错误会抛掷InflateException

//menuRes 要载入XML布局文件里的资源ID

//menu 要填充的菜单,这些项目和子菜单就被加入到要填充菜单中

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

        return true;

    }

其它都和在Activity中创建Menu同样。

小知识:单击MENUbutton时,在Activity中回调的函数可能有两个:

第一个是onOptionsItemSelected(),这个函数仅仅在第一次单击当前应用中的MENUbutton时回调,以后再不回调。

第二个是onPrepareOptionsMenu(),这个函数在每次单击MENUbutton后显示MENU时被系统回调,每次MENU显示前都会回调此函数。我们一般依据条件改变MENU显示的逻辑都放在这个函数里面。

转自:http://zhouyuting714.blog.163.com/blog/static/1811643182011327101931489/

Android学习之Menu的更多相关文章

  1. Android学习笔记——Menu(三)

    知识点 今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习. Popup Menu(弹出式菜单) 弹出式菜单是一种固定在View上的菜单模型.主要用于以下三种情况: 为特定的内容提 ...

  2. Android学习笔记——Menu(二)

    知识点: 这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu). 上下文菜单 上下文菜单提供对UI界面上的特定项或上下文框架的操作,就 ...

  3. Android学习笔记——menu

    该工程的功能是实现两个数相乘,并在另外一个Activity中显示计算的结果 以下的代码是MainActivity.java中的代码 package com.example.menu; import a ...

  4. Android学习笔记--Menu菜单的使用

    实现选项菜单.上下文菜单,以及菜单内部的子菜单. 视图效果: MainActivity 选项菜单 选项菜单的子菜单 上下文菜单(按住按钮或者EditText弹出) 注意:上下文菜单如何弹出?在注册该菜 ...

  5. Android学习笔记——Menu(一)

    背景: Android3.0(API level 11)开始,Android设备不再需要专门的菜单键. 随着这种变化,Android app应该取消对传统6项菜单的依赖.取而代之的是提供anction ...

  6. 【转】 Pro Android学习笔记(三四):Menu(5):动态菜单

    目录(?)[-] OptionsMenu的创建方式 如何再次创建OptionsMenu 每次访问都重新填充菜单项 OptionsMenu的创建方式 OptionMenu在第一次访问该菜单时调用,只调用 ...

  7. 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单

    目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...

  8. 【转】 Pro Android学习笔记(三二):Menu(3):Context菜单

    目录(?)[-] 什么是Context menu 注册View带有Context menu 填Context菜单内容 Context菜单点击触发 什么是Context menu 在桌面电脑,我们都很熟 ...

  9. 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单

    目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...

随机推荐

  1. 【JVM】调优笔记3-----JVM参数配置 JDK1.8

    一.关于JVM参数配置,有多种途径. 1.在tomcat中直接配置的 打开tomcat的安装目录, 在bin下修改catalina.bat文件 添加如下: set "JAVA_OPTS=-X ...

  2. UML:概要设计,用什么画我的类图?

    背景 做过需求之后,很少使用 UML 画概要设计,这几天尝试的用了几个工具,最总还是选择了 VisualStudio. Edraw 详细信息很难编辑,如:签名. Viso 添加成员太麻烦了. Visu ...

  3. git 经常使用操作集锦

    创建仓库 新建普通仓库: jxdong@ubuntu-server:~/workspace/git$ git init Reinitialized existing Git repository in ...

  4. Go的安装和使用/卸载/升级、安装指定版本

    mac: 1.brew install go默认安装最新的,更新go也是这条命令,建议这个方法,省事 2.从官网https://golang.org/dl/下载pkg包安装,官方说1.12是最后一个支 ...

  5. 我所遭遇过的游戏中间件--Apex

    我所遭遇过的游戏中间件--Apex Apex是PhysX的扩展中间件,它是在PhysX的基础上封装了一层.用于实现布料,粒子,破碎这三种物理效果.我只研究其布料处理.使用Apex做物理最大的好处是:它 ...

  6. VMware与Cisco DRAC中的virtual disk的对应关系

    笔者面临的问题如下: 笔者有一台Cisco C240的服务器, 其中有十块容量一样大的SAS的local disk, 一块SSD. 其中的两块SAS盘组成了一个RAID 1的virtual drive ...

  7. IOS调试—断点调试以及动态输出

    在开发App的过程中,需要反复的修改和优化我们的代码,特别是当程序出现bug,需要快速的找出错误的原因,进行修改,以保证程序的正确执行. 断点调试,是最常用最简单的一种调试方式,可以一步步跟踪程序执行 ...

  8. Global and Local Coordinate Systems

    ansys 中的坐标系 整体和局部坐标系(主要在建模中涉及) 整体坐标系是以你建模的整个建筑为一体,来确定坐标系的.比如你建一个矩形平面的建筑,整体坐标系一般默认水平方向为X轴,竖直方向为Y轴,以垂直 ...

  9. 正则 js截取时间

    项目中要把时间截取,只要年月日,不要时分秒,于是 /\d{4}-\d{1,2}-\d{1,2}/g.exec("2012-6-18 00:00:00") 或者另一种 var dat ...

  10. CSS种让border-bottom大道text-decoration一样的效果,甚至要比它的效果更理想一些!

    <p style="width:300px;line-height: 30px;margin:0 auto;text-indent: 24pt;word-break:break-all ...