Android学习之Menu
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的更多相关文章
- Android学习笔记——Menu(三)
知识点 今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习. Popup Menu(弹出式菜单) 弹出式菜单是一种固定在View上的菜单模型.主要用于以下三种情况: 为特定的内容提 ...
- Android学习笔记——Menu(二)
知识点: 这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu). 上下文菜单 上下文菜单提供对UI界面上的特定项或上下文框架的操作,就 ...
- Android学习笔记——menu
该工程的功能是实现两个数相乘,并在另外一个Activity中显示计算的结果 以下的代码是MainActivity.java中的代码 package com.example.menu; import a ...
- Android学习笔记--Menu菜单的使用
实现选项菜单.上下文菜单,以及菜单内部的子菜单. 视图效果: MainActivity 选项菜单 选项菜单的子菜单 上下文菜单(按住按钮或者EditText弹出) 注意:上下文菜单如何弹出?在注册该菜 ...
- Android学习笔记——Menu(一)
背景: Android3.0(API level 11)开始,Android设备不再需要专门的菜单键. 随着这种变化,Android app应该取消对传统6项菜单的依赖.取而代之的是提供anction ...
- 【转】 Pro Android学习笔记(三四):Menu(5):动态菜单
目录(?)[-] OptionsMenu的创建方式 如何再次创建OptionsMenu 每次访问都重新填充菜单项 OptionsMenu的创建方式 OptionMenu在第一次访问该菜单时调用,只调用 ...
- 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...
- 【转】 Pro Android学习笔记(三二):Menu(3):Context菜单
目录(?)[-] 什么是Context menu 注册View带有Context menu 填Context菜单内容 Context菜单点击触发 什么是Context menu 在桌面电脑,我们都很熟 ...
- 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
随机推荐
- VC6 下 libpng 库的编译与初步使用
VC6 下 libpng 库的编译与初步使用 目录 libong 库的介绍 VC6 下 libpng 的编译 下载 libpng 与 zlib 进行编译 得到 .lib 文件 初步使用 对 VC6 ...
- Entityframework:启用延时加载的主意事项(只为强化记忆)
Check List 无参的.高于私有访问级别的构造方法(经常忘记). 非封闭的类(默认的非封闭的). DbContext 配置要开启(默认是开启的). 因为我喜欢将类型设置为封闭的,提供有参数的构造 ...
- ping + 时间 日志
:top set PINGIP="192.168.1.236" echo %date% %time%>>%PINGIP%.txt ping -n 1 %PINGIP% ...
- VC++ 改动VMware BIOS、uuid_location、ethernet0_address等
VC++ 改动VMware BIOS.uuid_location.ethernet0_address等.主要问题例如以下 (1)随机产生16进制数. (2)改动vmx相应项.依据规则一般仅仅改动最后三 ...
- 我也用github(2)——关联本地工程到github仓库
github只是为我们提供了一个存储的功能,我们也可以准备一个服务器(当然,能联网是前提了),将版本库保存到服务器上. 本文以github为例进行实验. 1. 在github上创建一个仓库 这个非常简 ...
- [转]VS2010快捷键
VS2010的快捷键,后附VS2008的快捷键 Ctrl+E,D ----格式化全部代码 Ctrl+E,F ----格式化选中的代码 CTRL + SHIFT + B生成解决方案 CTRL + F7 ...
- go语言基础之随机数的使用
1.随机数的使用 示例1: 如果种子参数一样,每次运行程序产生的随机数都一样 package main //必须有个main包 import "fmt" import &quo ...
- 什么是'脑分裂(split brain)'?
这个词明显有点恐怖.设想一下,如果某时刻连接两个控制器之间的通路出现了问题,而不是其中某个控制器死机,此时两个控制器其实都是工作正常的,但是两者都检测不到对方的存在,所以两者都尝试接管所有总线,这时候 ...
- 【面试必读】一不注意就做错的五道JavaScript题目
如果不会,可以存在DW中运行试一下哦~ 1.这段代码会输出什么? function Container( properties ) { var objthis = this; for ( var i ...
- 如果不用jQuery,Ajax你还能写出多少?
许久之前发过一篇关于Ajax的博客,通篇讲的都是通过jQuery编写Ajax,可能因为jQuery在这方面做的实在太好,以至于突然发现不用jQuery的话自己都模糊了Ajax的写法,这里重温一下. F ...