android的Menu使用

1。普通的Menu

  先来看看最简单的Menu怎样实现。

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


代码

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add(0, 1, 1, "苹果");
menu.add(0, 2, 2, "香蕉");
return super.onCreateOptionsMenu(menu);
}

这样就有了两个菜单选项。如果要添加点击事件,则要覆盖onOptionsItemSelected(MenuItem item)方法。


代码

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
if(item.getItemId() == 1){
Toast t = Toast.makeText(this, "你选的是苹果", Toast.LENGTH_SHORT);
t.show();
}
else if(item.getItemId() == 2){
Toast t = Toast.makeText(this, "你选的是香蕉", Toast.LENGTH_SHORT);
t.show();
}
return true;
}

2。SubMenu

  SubMenu的制作也同样简单,在第一段代码onCreateOptionsMenu(Menu menu)方法中加入几句,成下面这样:


代码

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add(0, 1, 1, "苹果");
menu.add(0, 2, 2, "香蕉");
SubMenu subMenu = menu.addSubMenu(1, 100, 100, "桃子");
subMenu.add(2, 101, 101, "大桃子");
subMenu.add(2, 102, 102, "小桃子");
return true;
}

点击“桃子”后就会出现子菜单,有两个子选项,分别是“大桃子”和“小桃子”。

3。Context Menu

  类似于电脑上的右键,长按某个View之后弹出来的菜单。

  首先在main.xml里定义若干个按钮。然后覆盖onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)方法。里面的代码如下:

首先要注册一下,在onCreate方法里,如下代码:


代码

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
registerForContextMenu(b1);
registerForContextMenu(b2);
}

代码

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
if(v==b1){
menu.setHeaderTitle("这是1");
menu.add(200, 200, 200, "Context Menu 1");
menu.add(200, 201, 201, "Context Menu 2");
}
else if(v==b2){
menu.setHeaderTitle("这是2");
menu.add(300, 300, 300, "C 1");
menu.add(300, 301, 301, "C 2");
}
super.onCreateContextMenu(menu, v, menuInfo);
}

4。动态Menu

  动态菜单就是根据不同的界面有不同的菜单。下面的代码实现这样的功能:当主界面的某个TextView的值是“M“和“N”时,弹出不同的菜单。


代码

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
String currentText = tv1.getText().toString();
if("M".equals(currentText)){
menu.clear();//先清掉菜单
MenuItem item = menu.add(0, 400, 401, "to N");//可以通过点击这个菜单项来改变tv1的值这样(变成N)就可以测试了
item.setIcon(android.R.drawable.alert_dark_frame);//android自带的图标
}
if("N".equals(currentText)){
menu.clear();//先清掉菜单
MenuItem item = menu.add(0, 401, 402, "to M");//可以通过点击这个菜单项来改变tv1的值这样(变成M)就可以测试了
item.setIcon(android.R.drawable.alert_light_frame);
}
menu.add(0, 402, 403, "Now is " + currentText);//现在共有两个菜单子项
return super.onPrepareOptionsMenu(menu);
}

  

5。用xml文件方式创建Menu

之前都是用代码的方法创建Menu,用xml配置文件也可以相当方便地制作菜单。

要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)方法,代码如下:


代码

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_xml_file, menu);
return true;
}

其他的都和在Activity中制作菜单一样。

android工程中menu的使用总结的更多相关文章

  1. 在android工程中添加图片资源(转加)

    在Android工程中,每添加一个资源,就会在gen目录下的R.java中自动生成一个新的静态整型变量来指向这个资源.程序文件中调用资源的时候,先在R.java中找到变量名,然后根据变量值查找资源. ...

  2. [转载]android工程中引入另一个工程中的资源

    原文地址:android工程中引入另一个工程中的资源作者:87fayuan 在项目中可能遇到这样的问题:项目过大,于是细分为N个子模块来做,每个模块都是不同的工程.涉及到activity传数据时,可以 ...

  3. 【Unity与Android】02-在Unity导出的Android工程中接入Google Admob广告

    我在上一篇文章 [Unity与Android]01-Unity与Android交互通信的简易实现) 中介绍了Unity与Android通讯的基本方法. 这一篇开始进入应用阶段,这次要介绍的是如何在An ...

  4. 当Android工程中提示你找不到头文件,但你已经设置头文件路径了

    虽然在Android.mk文件中,配置了LOCAL_C_INCLUDES路径,但是工程中的红色叉号一直提示找不到头文件 这时,你在工程树目录中展开Includes项,捣鼓捣鼓,重新build下,或许就 ...

  5. 自动删除Android工程中无用的资源

    开发时间久了, 几个版本迭代之后, 工程中难免留下很多垃圾资源, 造成apk的包很大, 这里介绍一个工具, 可以自动扫描工程中, 没有使用的资源, 然后自动删除: 包括图片, xml, 文本等. 采用 ...

  6. Android 工程中各种文件的介绍

    一:Android.mk     Android.mk 内部定义了一个或者多个源代码的模块,该文件的产生是和NDK相关的,NDK 是Android提供的一种工具,可以为编译mk文件内部的源代码提供依赖 ...

  7. 清除Android工程中没用到的资源

    项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...

  8. 去掉 Android工程中让人很不爽的“黄色警告”

    一:问题       二:解决方法 (1)选择android工程,右键Android Tools —> Clear Lint Markers 这种方式能够清除android工程里面的所有警告信息 ...

  9. 清除Android工程中没用到的资源(转)

    项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...

随机推荐

  1. :after和:before的作用及使用方法

    1.  :before 和 :after 的主要作用是在元素内容前后加上指定内容,示例: HTML代码: <p>你好</p> CSS代码: p:before{ content: ...

  2. MarkDown常用语法记录

    目录 1. 斜体和粗体 2. 分级标题 3. 超链接 3.1 行内式(推荐) 3.2 行外式 3.3 自动链接 4. 锚点 5. 列表 5.1无序列表 5.2有序列表 6. 引用 7. 插入图像 8. ...

  3. 程序设计入门——C语言 第8周编程练习 2GPS数据处理(6分)

    题目内容: NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine ...

  4. Asp.Net_Mvc_获取当前Url、Controller、Action

    一.URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟 ...

  5. 底部漂浮DIV

    .buttonDiv{background-color: #4e4f50; border: 2px solid #83ABD3; border-radius: 4px; -khtml-opacity: ...

  6. OneProxy自动剔除延迟节点

    在多种情况下,MySQL主从节点之间可能存在延迟.比如,主库的写入能力强于从库的写入能力.从库单线程复制.从库复制出错导致相关进程停止.为了保证数据的时效性,OneProxy提供了复制时效性检查,用于 ...

  7. SPSS数据分析—Probit回归模型

    Probit含义为概率单位,和Logistic回归一样,Probit回归也用于因变量为分类变量的情况,通常情况下,两种回归方法的结果非常接近,但是由于Probit回归的结果解释起来比较抽象不易理解,因 ...

  8. DOM操作方法的简单归纳

    (1)要在每个匹配的元素中插入新元素,使用: .append() .appendTo()   .prepend() .prependTo() (2)要在每个匹配的元素相邻的位置上插入新元素,使用: . ...

  9. loadrunner获取当前CST时间

    第一种方法:使用LR的参数化功能. 代码如下,nowtime是保存当前CST时间的字符串变量,local_time是要参数化的变量. Action() { char *nowtime; nowtime ...

  10. php学习函数

    1defined和define区别 2.dirname(__FILE__) 3.set_include_path 4.get_include_path 5.realpath() 6.require_p ...