菜单Menu大致分为三种类型:选项菜单(OptionsMenu),上下文菜单(ContextMenu),子菜单(SubMenu)。

1、选项菜单

在一个Activity界面中点击手机Menu键,在屏幕下方弹出的菜单就叫选项菜单(OptionsMenu)。

创建一个选项菜单的步骤:
(1)、覆写Activity的onCreateOptionsMenu(Menu menu)函数。
(2)、调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标。
a、add()方法参数的介绍
看一看menu.add方法的参数:
       第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。
       第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。
       第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
       第四个String类型的title参数,表示选项中显示的文字。
(3)、当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted()方法来响应事件。
案例代码:
 package com.example.menu;

 import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import android.app.AlertDialog;
import android.content.DialogInterface; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
* 创建一个选项菜单的步骤: 1、覆写Activity的onCreateOptionsMenu(Menu menu)函数
* 2、调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标
* 3、当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted()方法来响应事件
*/
//onCreateOptionsMenu()此方法只会调用一次,即第一次显示的时候会调用.
public boolean onCreateOptionsMenu(Menu menu)// 需要重写的函数
{
menu.add(0, 0, 0, "关于");
menu.add(0, 1, 0, "离开"); return super.onCreateOptionsMenu(menu);
}
//如果需要更新菜单项.可以在onPrepareOptionsMenu()方法中操作.
public boolean onPrepareOptionMenu(Menu menu)
{
Toast.makeText(this, "菜单显示器前执行的方法", Toast.LENGTH_SHORT).show();
return super.onPrepareOptionsMenu(menu); }
public boolean onOptionsItemSelected(MenuItem item)// 点击后响应的事件
{
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case 0:
openOptionsDialog();
break;
case 1:
exitopenOptionsDialog();
break;
}
return super.onOptionsItemSelected(item); } private void openOptionsDialog() {
new AlertDialog.Builder(this).setTitle("关于").setMessage("手机的配置信息")
.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub }
}).show();
} private void exitopenOptionsDialog() {
new AlertDialog.Builder(this).setTitle("离开").setMessage("是否离开?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
finish();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
arg0.dismiss();
}
}).show();
}
}

2、上下文菜单

Android 的上下文菜单类似于Windows上的右键菜单。当为一个视图注册了上下文菜单之后,长按(2 秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单。任何视图都可以注册上下文菜单,不过,最常见的是用于列表视图ListView的item。

创建上下文菜单步骤:

1、 覆写 Activity 的 onCreateContextMenu() 方法,调用 Menu 的 add 方法添加菜单项(MenuItem)。

2、覆盖 Activity 的 onContextItemSelected() 方法,响应上下文菜单菜单项的单击事件。

3、调用 registerForContextMenu() 方法,为视图注册上下文菜单。

代码:

 package com.example.menu;

 import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast; public class MainActivity extends Activity { private ListView listview = null;
private ArrayAdapter<String> adapter;
private String info[] = { "选项1", "选项2", "选项3", "选项4","选项5","选项6"}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView)findViewById(R.id.listview);
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,info);
listview.setAdapter(adapter);
this.registerForContextMenu(listview);
}
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenuInfo info) {
menu.setHeaderTitle("我是上下文菜单");
menu.setHeaderIcon(R.drawable.ic_launcher);
menu.add(1, 1, 1, "我是上下文菜单选项1");
menu.add(1, 2, 1, "我是上下文菜单选项2");
menu.add(1, 3, 1, "我是上下文菜单选项3");
menu.add(1, 4, 1, "我是上下文菜单选项4"); }
public boolean onContextItemSelected(MenuItem item)
{
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击上下文菜单选项1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击上下文菜单选项2", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击上下文菜单选项3", Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(this, "点击上下文菜单选项4", Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item); }
public void onContextMenuClosed(Menu menu)
{
menu.close();
} }

注意的问题:

android.R.layout.simple_list_item_1为系统是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。凡是以android.R...都为系统定义好的。

3、子菜单
创建子菜单的步骤:
1、 覆写Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单
2、 调用SubMenu的add()方法,添加子菜单项(addSubMenu)
3、 覆写onOptionsItemSelected()方法,响应子菜单的单击事件
代码:
 package com.example.menu;

 import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast; public class MainActivity extends Activity { private ListView listview = null;
private ArrayAdapter<String> adapter;
private String info[] = { "选项1", "选项2", "选项3", "选项4","选项5","选项6"}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); }
public boolean onCreateOptionsMenu(Menu menu)
{
SubMenu s1=menu.addSubMenu(1,0,1,"我是菜单1");
s1.setIcon(R.drawable.ic_launcher);
s1.setHeaderTitle("子菜单");//设置子菜单标题
s1.add(1,1,0,"我是子菜单(1)");
s1.add(1, 2, 0, "我是子菜单(2)");
s1.add(1, 3, 0, "我是子菜单(3)");
s1.add(1, 4, 0, "我是菜子单(4)");
SubMenu s2 = menu.addSubMenu(2, 0, 1, "我是菜单2");
s2.setIcon(R.drawable.ic_launcher);
s2.setHeaderTitle("子菜单");
s2.add(2, 1, 1, "我是子菜单(1)");
s2.add(2, 2, 1, "我是子菜单(2)");
s2.add(2, 3, 1, "我是子菜单(3)");
s2.add(2, 4, 1, "我是子菜单(4)");
return super.onCreateOptionsMenu(menu);
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getGroupId() == 1) {// 判断分组
switch (item.getItemId()) {
case 1:
Toast.makeText(MainActivity.this, "菜单1的子菜单1被点击",
Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(MainActivity.this, "菜单1的子菜单2被点击",
Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(MainActivity.this, "菜单1的子菜单3被点击",
Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(MainActivity.this, "菜单1的子菜单4被点击",
Toast.LENGTH_SHORT).show();
break; }
} else if (item.getGroupId() == 2) {
switch (item.getItemId()) {
case 1:
Toast.makeText(MainActivity.this, "菜单2的子菜单1被点击",
Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(MainActivity.this, "菜单2的子菜单2被点击",
Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(MainActivity.this, "菜单2的子菜单3被点击",
Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(MainActivity.this, "菜单2的子菜单4被点击",
Toast.LENGTH_SHORT).show();
break;
}
} return super.onOptionsItemSelected(item);
}
}

Android开发之Menu组件的更多相关文章

  1. Android开发之Menu和actionBar

    一.通过Menu目录下创建一个布局文件: 先看代码meu/main.xml: <?xml version="1.0" encoding="utf-8"?& ...

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

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

  3. Android开发之旅4:应用程序基础及组件

    引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...

  4. Android开发之旅5:应用程序基础及组件

    引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...

  5. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  6. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  7. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

  8. android开发之Animations的使用(二)

    android开发之Animations的使用(二) 本博文主要讲述的是android开发中的animation动画效果的使用,和上一篇博文不同的是,此次四种动画效果,主要使用的是xml文件实现的,提 ...

  9. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

随机推荐

  1. 高并发的常见策略--大型web项目

    一个运营的系统在正式上线后将会遇到各种层级的高并发请求,因此我们必须对此做出相应的策略和技术解决方案,首先我们需要认清系统的高并发由3个层面导致: 1. 传输层 大量用户对系统请求后,将会造成网络带宽 ...

  2. vijosP1210 盒子与球

    vijosP1210 盒子与球 链接:https://vijos.org/p/1210 [思路] Stirling+全排列. 因为第二类stirling所求是没有标明盒子顺序的方案数,所以最后需要乘一 ...

  3. HW3.20

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  4. 《算法:C语言实现》阅读笔记

    //从今天起准备认真看完这本书.本渣虽然笨,但是窝懒啊.... //今天开始看第一章.希望坚持下去. 第一章 引言 通过讨论连通问题的几种算法,来引出算法的重要性. 1.1 连通问题的快速查找算法 感 ...

  5. HDU 1102 Constructing Roads (最小生成树)

    最小生成树模板(嗯……在kuangbin模板里面抄的……) 最小生成树(prim) /** Prim求MST * 耗费矩阵cost[][],标号从0开始,0~n-1 * 返回最小生成树的权值,返回-1 ...

  6. 【三支火把】---常用C语言控制台函数总结(持续更新)

    写了这么久的C程序,每次看到输出的结果都是从上往下排列的黑白框,有没有感觉很无聊啊?今天再次总结一个常用的控制台函数,能够帮助你做好一个好看的界面. 1.设置光标位置代码如下: int main(vo ...

  7. spring getbean 方法分析

    spring 缺省: 1.spring用DefaultListableBeanFactory.preInstantiateSingletons()建立bean实例 2.缺省采用单例模式 在最近的项目中 ...

  8. 动态获取jar文件的路径

    下面专门封装了一个类来处理: import  java.io.File; /** * 获取打包后jar的路径信息 * @author Administrator *  2011-01-16 13:53 ...

  9. Android解析Json速度最快的库:json-smart

    场景描写叙述: 本文仅验证了在安卓环境下使用Json的Key作为反序列化条件的解析速度.结论是解析速度最快的不是阿里的fastjson,也不是Google的Gson,而是json-smart. And ...

  10. node.js在windows下的学习笔记(3)---npm

    1.什么是npm npm是Node.js的包管理器,它允许开发人员在Node.js的应用程序中创建,共享,重用模块.之前我们通过node的官网的安装程序安装了Node.js,那么npm就已经装好了的. ...