android中包含多种菜单,本例带来的是选项菜单和上下文菜单。

1.选项菜单

在android中,开发者可以在xml文档中部署所要添加的菜单,在后台调用即可。

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

     <item
android:id="@+id/action_add"
android:title="添加"
android:showAsAction="always|withText"/>
<item
android:id="@+id/action_save"
android:title="保存"
android:showAsAction="ifRoom"/>
<item
android:id="@+id/action_discard"
android:title="删除"
android:showAsAction="ifRoom"/>
<item
android:id="@+id/action_delete"
android:title="删除"
android:showAsAction="ifRoom"/>
<item
android:id="@+id/action_undo"
android:title="撤销"
android:showAsAction="ifRoom"/>
</menu>

menu.xml

在xml中我们定义了几个常用的菜单,添加、删除、保存等。在xml中定义菜单式通过在<menu/>中定义的。<item/>即为菜单项。android最多可以有六个菜单,超出之后android系统会自动将超出的菜单放在更多的菜单项。

     public boolean onCreateOptionsMenu(Menu menu) {
Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
mOptionsMenu = menu; return super.onCreateOptionsMenu(menu);
}

菜单显示

重写onCreateOptionsMenu方法,这里调用已经定义好的menu.xml,可以显示我们刚刚定义的菜单项。

在开发中,菜单也是与事件分不开的。通过onoptionsitemclick,来监听菜单的选中事件。

 public boolean onOptionsItemSelected(MenuItem menu)
{ switch(menu.getItemId())
{
case R.id.action_add:
Toast.makeText(this, "您点击了添加", Toast.LENGTH_LONG).show();
return true;
case R.id.action_delete:
Toast.makeText(this, "您点击了删除", Toast.LENGTH_LONG).show();
return true;
case R.id.action_save:
Toast.makeText(this, "您点击了保存", Toast.LENGTH_LONG).show();
return true;
case R.id.action_undo:
Toast.makeText(this, "你点击了撤销", Toast.LENGTH_LONG).show();
return true;
default:
return super.onOptionsItemSelected(menu);
} }

菜单事件

当然,开发人员也可以动态的添加菜单,不需要在xml中预先写好每一个菜单项。

mOptionsMenu.add(1, 1, 1, "添加");第一个参数:菜单项的分组id;第二个参数:菜单项的id;第三个参数:菜单显示顺序的id,android会根据id进行从左到右,从上到下的排序;第四个参数:菜单项的标题

2.子菜单和上下文菜单

在android中,子菜单和菜单是同一级的,可以通过submenu.add添加子菜单。添加一个带复选框的子菜单

     public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// MenuInflater inflater = getMenuInflater();
//inflater.inflate(R.menu.main, menu);
// mOptionsMenu = menu;
SubMenu filesubmenu=menu.addSubMenu(1,1,2,"文件");
MenuItem newMenu=filesubmenu.add(1,2,2,"新建");
newMenu.setCheckable(true);
MenuItem openMenu=filesubmenu.add(2,3,3,"打开");
filesubmenu.setGroupCheckable(2, true, true);
return super.onCreateOptionsMenu(menu);
}

子菜单

上下文菜单可以和任意的view关联,而且它必须关联一个view,例如button、textview等。

 public void onCreateContextMenu(ContextMenu menu,View view,ContextMenuInfo menuInof)

     {
super.onCreateContextMenu(menu, view, menuInof);
menu.add("上下文菜单");
menu.add(0,ITEM1,Menu.NONE,"放大").setCheckable(true).setChecked(true);
menu.add(20,ITEM2,Menu.NONE,"缩小");
menu.add(20,ITEM3,Menu.NONE,"平移");
menu.setGroupCheckable(20, true, true);
SubMenu sub=menu.addSubMenu(0,4,Menu.NONE,"子菜单");
sub.add("子菜单1");
sub.add("子菜单2");
}

上下文菜单

上下文菜单中可以添加子菜单的。上下文菜单在添加中,需要注册。

Button button9=(Button)findViewById(R.id.button9);
registerForContextMenu(button9);

这里将定义的上下文菜单注册到button9中。

如果想实现对上下文菜单选择时间的监听,oncontextitemselected方法实现。

      public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
case ITEM1:
//在这里添加处理代码
Toast.makeText(this, "点击了放大", 5000).show();
return true;
case ITEM2:
//在这里添加处理代码
Toast.makeText(this, "点击了缩小", 5000).show();
break;
case ITEM3:
//在这里添加处理代码 break;
}
return true;
}

上下文菜单事件

Android学习之菜单的更多相关文章

  1. Android学习笔记菜单资源文件

    创建菜单资源 menu_one.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns: ...

  2. android学习七 菜单

    1.菜单分类 常规菜单 子菜单 上下文菜单 图标菜单 辅助菜单 交替菜单 2.菜单类 andriod.view.menu   3.菜单的参数     名称:字符串标题     菜单ID:整数     ...

  3. Android学习笔记之横向二级菜单实现

    PS:元旦来一发. 学习内容: 1.Android二级横向菜单的实现过程.效果如上图...   这种横向的二级菜单在很多的app都有所应用.效果看起来还是非常的美观的.也算是项目需要,自己也就学了一下 ...

  4. Android学习笔记之如何使用圆形菜单实现旋转效果...

    PS:最近忙于项目的开发,一直都没有去写博客,是时候整理整理自己在其中学到的东西了... 学习内容: 1.使用圆形菜单并实现旋转效果..     Android的圆形菜单我也是最近才接触到,由于在界面 ...

  5. Android学习笔记之树形菜单的应用...

    PS:终于考完试了,总算是解脱了...可以正式上手项目开发了.... 学习内容: 1.掌握如何使用树形菜单...   对知识点进行一下补充...居然忘记了去学习树形菜单...不过在这里补上... Ex ...

  6. Android:有关菜单的学习(供自己参考)

    Android:有关==菜单==的学习 上下文菜单 上下文菜单就是手机中对某一项进行==点击一定时间==后弹出的针对该项处理的菜单. context_menu.xml: <?xml versio ...

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

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

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

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

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

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

随机推荐

  1. 2014年百度之星资格赛第二题Disk Schedule

    Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取. 然而,在现实中,这样的做法非常复杂. 我们考虑一个相对简单的场景. ...

  2. 在Android中建立Android project没有R.java文件

    最近在搞一下安卓,在新建Android工程,既然发现在gen目录下没有R.java这个文件.我当时感到很郁闷,上次建Android工程才好好的,怎么这次既然报错没有R.java.后来我用以下才解决了. ...

  3. 多线程中的lua同步问题

    最近写paintsnow::start时出现了一个非常麻烦的BUG,程序的Release版本大约每运行十几次就会有一次启动时崩溃(Debug版本还没崩溃过),崩溃点也不固定.经过简单分析之后,确定是线 ...

  4. GCD 和延时调用

    因为 Playground 不进行特别配置的话是无法在线程中进行调度的,因此本节中的示例代码需要在 Xcode 项目环境中运行.在 Playground 中可能无法得到正确的结果. GCD 是一种非常 ...

  5. LR实战之Discuz开源论坛——安装及简介

    想了很久,也许是因为这段时间特别闲,从毕业到现在,我的测试职业生涯也近两年了,发现自己越来越喜欢测试领域,也越来越偏向测试开发了,作为一名专业的测试人员,不得不要学习性能测试,而使用LoadRunne ...

  6. MySql5.1在Win7下的安装与重装问题的解决

    痛苦啊痛苦,我也不知道这两天怎么了.上班没有精神,还打瞌睡,下班后又感觉很累.精力集中不起来. 这篇花了我好久的时间,我效率这么差,~\(≧▽≦)/~. 软件包下载 首先单击mysql-5.1.53- ...

  7. localStorage和sessionStorage火狐浏览器和其他高级浏览器的区别

    例子: <script>window.onload=function(){ var oSetData = document.getElementById('setData'); var o ...

  8. XMLHttpRequest Level 2 使用指南

    XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信. 最早,微软在IE 5引进了这个接口.因为它太有用,其他浏览器也模仿部署了,ajax操作因此得以诞生. ...

  9. latex 固定图片位置

    1,插入并列的子图 \usepackage{subfigure} \begin{figure}[H] \centering \subfigure[SubfigureCaption]{ \label{F ...

  10. 一.Linq to JSON是用来干什么的?

    Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和 ...