Android开发之Menu组件

菜单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()方法来响应事件。

案例代码:

 1 package com.example.menu;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Menu;
 6 import android.view.MenuItem;
 7 import android.widget.Toast;
 8 import android.app.AlertDialog;
 9 import android.content.DialogInterface;
10
11 public class MainActivity extends Activity {
12
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.activity_main);
17     }
18
19     /*
20      * (non-Javadoc)
21      *
22      * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
23      * 创建一个选项菜单的步骤: 1、覆写Activity的onCreateOptionsMenu(Menu menu)函数
24      * 2、调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标
25      * 3、当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted()方法来响应事件
26      */
27      //onCreateOptionsMenu()此方法只会调用一次,即第一次显示的时候会调用.
28     public boolean onCreateOptionsMenu(Menu menu)// 需要重写的函数
29     {
30         menu.add(0, 0, 0, "关于");
31         menu.add(0, 1, 0, "离开");
32
33         return super.onCreateOptionsMenu(menu);
34     }
35      //如果需要更新菜单项.可以在onPrepareOptionsMenu()方法中操作.
36     public boolean onPrepareOptionMenu(Menu menu)
37     {
38         Toast.makeText(this, "菜单显示器前执行的方法", Toast.LENGTH_SHORT).show();
39         return super.onPrepareOptionsMenu(menu);
40
41     }
42     public boolean onOptionsItemSelected(MenuItem item)// 点击后响应的事件
43     {
44         super.onOptionsItemSelected(item);
45         switch (item.getItemId()) {
46         case 0:
47             openOptionsDialog();
48             break;
49         case 1:
50             exitopenOptionsDialog();
51             break;
52         }
53          return super.onOptionsItemSelected(item);
54
55     }
56
57     private void openOptionsDialog() {
58         new AlertDialog.Builder(this).setTitle("关于").setMessage("手机的配置信息")
59                 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
60
61                     @Override
62                     public void onClick(DialogInterface arg0, int arg1) {
63                         // TODO Auto-generated method stub
64
65                     }
66                 }).show();
67     }
68
69     private void exitopenOptionsDialog() {
70         new AlertDialog.Builder(this).setTitle("离开").setMessage("是否离开?")
71                 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
72
73                     @Override
74                     public void onClick(DialogInterface arg0, int arg1) {
75                         // TODO Auto-generated method stub
76                         finish();
77                     }
78                 })
79                 .setNegativeButton("取消", new DialogInterface.OnClickListener() {
80
81                     @Override
82                     public void onClick(DialogInterface arg0, int arg1) {
83                         // TODO Auto-generated method stub
84                         arg0.dismiss();
85                     }
86                 }).show();
87     }
88 }

2、上下文菜单

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

创建上下文菜单步骤:

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

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

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

代码:

 1 package com.example.menu;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.ContextMenu;
 6 import android.view.ContextMenu.ContextMenuInfo;
 7 import android.view.Menu;
 8 import android.view.MenuItem;
 9 import android.view.View;
10 import android.widget.ArrayAdapter;
11 import android.widget.ListView;
12 import android.widget.Toast;
13
14 public class MainActivity extends Activity {
15
16     private ListView listview = null;
17     private ArrayAdapter<String> adapter;
18     private String info[] = { "选项1", "选项2", "选项3", "选项4","选项5","选项6"};
19
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         setContentView(R.layout.activity_main);
24         listview=(ListView)findViewById(R.id.listview);
25         adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,info);
26         listview.setAdapter(adapter);
27         this.registerForContextMenu(listview);
28     }
29     public void onCreateContextMenu(ContextMenu menu, View view,
30             ContextMenuInfo info) {
31         menu.setHeaderTitle("我是上下文菜单");
32         menu.setHeaderIcon(R.drawable.ic_launcher);
33         menu.add(1, 1, 1, "我是上下文菜单选项1");
34         menu.add(1, 2, 1, "我是上下文菜单选项2");
35         menu.add(1, 3, 1, "我是上下文菜单选项3");
36         menu.add(1, 4, 1, "我是上下文菜单选项4");
37
38     }
39     public boolean onContextItemSelected(MenuItem item)
40     {
41         switch (item.getItemId()) {
42         case 1:
43             Toast.makeText(this, "点击上下文菜单选项1", Toast.LENGTH_SHORT).show();
44             break;
45         case 2:
46             Toast.makeText(this, "点击上下文菜单选项2", Toast.LENGTH_SHORT).show();
47             break;
48         case 3:
49             Toast.makeText(this, "点击上下文菜单选项3", Toast.LENGTH_SHORT).show();
50             break;
51         case 4:
52             Toast.makeText(this, "点击上下文菜单选项4", Toast.LENGTH_SHORT).show();
53             break;
54         }
55         return super.onContextItemSelected(item);
56
57     }
58     public void onContextMenuClosed(Menu menu)
59     {
60         menu.close();
61     }
62
63 }

注意的问题:

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

3、子菜单创建子菜单的步骤:1、 覆写Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单2、 调用SubMenu的add()方法,添加子菜单项(addSubMenu)3、 覆写onOptionsItemSelected()方法,响应子菜单的单击事件代码:
 1 package com.example.menu;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Menu;
 6 import android.view.MenuItem;
 7 import android.view.SubMenu;
 8 import android.widget.ArrayAdapter;
 9 import android.widget.ListView;
10 import android.widget.Toast;
11
12 public class MainActivity extends Activity {
13
14     private ListView listview = null;
15     private ArrayAdapter<String> adapter;
16     private String info[] = { "选项1", "选项2", "选项3", "选项4","选项5","选项6"};
17
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22
23     }
24 public boolean onCreateOptionsMenu(Menu menu)
25     {
26         SubMenu s1=menu.addSubMenu(1,0,1,"我是菜单1");
27         s1.setIcon(R.drawable.ic_launcher);
28         s1.setHeaderTitle("子菜单");//设置子菜单标题
29         s1.add(1,1,0,"我是子菜单(1)");
30         s1.add(1, 2, 0, "我是子菜单(2)");
31         s1.add(1, 3, 0, "我是子菜单(3)");
32         s1.add(1, 4, 0, "我是菜子单(4)");
33         SubMenu s2 = menu.addSubMenu(2, 0, 1, "我是菜单2");
34         s2.setIcon(R.drawable.ic_launcher);
35         s2.setHeaderTitle("子菜单");
36         s2.add(2, 1, 1, "我是子菜单(1)");
37         s2.add(2, 2, 1, "我是子菜单(2)");
38         s2.add(2, 3, 1, "我是子菜单(3)");
39         s2.add(2, 4, 1, "我是子菜单(4)");
40         return super.onCreateOptionsMenu(menu);
41     }
42
43     @Override
44     public boolean onOptionsItemSelected(MenuItem item) {
45         if (item.getGroupId() == 1) {// 判断分组
46             switch (item.getItemId()) {
47             case 1:
48                 Toast.makeText(MainActivity.this, "菜单1的子菜单1被点击",
49                         Toast.LENGTH_SHORT).show();
50                 break;
51             case 2:
52                 Toast.makeText(MainActivity.this, "菜单1的子菜单2被点击",
53                         Toast.LENGTH_SHORT).show();
54                 break;
55             case 3:
56                 Toast.makeText(MainActivity.this, "菜单1的子菜单3被点击",
57                         Toast.LENGTH_SHORT).show();
58                 break;
59             case 4:
60                 Toast.makeText(MainActivity.this, "菜单1的子菜单4被点击",
61                         Toast.LENGTH_SHORT).show();
62                 break;
63
64             }
65         } else if (item.getGroupId() == 2) {
66             switch (item.getItemId()) {
67             case 1:
68                 Toast.makeText(MainActivity.this, "菜单2的子菜单1被点击",
69                         Toast.LENGTH_SHORT).show();
70                 break;
71             case 2:
72                 Toast.makeText(MainActivity.this, "菜单2的子菜单2被点击",
73                         Toast.LENGTH_SHORT).show();
74                 break;
75             case 3:
76                 Toast.makeText(MainActivity.this, "菜单2的子菜单3被点击",
77                         Toast.LENGTH_SHORT).show();
78                 break;
79             case 4:
80                 Toast.makeText(MainActivity.this, "菜单2的子菜单4被点击",
81                         Toast.LENGTH_SHORT).show();
82                 break;
83             }
84         }
85
86         return super.onOptionsItemSelected(item);
87     }
88 }
				
时间: 2024-10-14 04:47:21

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

【转】Android开发之旅:应用程序基础及组件

为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用程序组件 2.1.活动(Activities) 2.2.服务(Services) 2.3.广播接收者(Broadcast receivers) 2.4.内容提供者(Content providers) 因为这些内容比较理论,且没有用例子来说明,看上去会比较枯燥,我就把这几篇写得算比较短,方便大家吸收. 1

Android安全开发之Provider组件安全

Android安全开发之Provider组件安全 作者:伊樵.呆狐@阿里聚安全 1 Content Provider组件简介 Content Provider组件是Android应用的重要组件之一,管理对数据的访问,主要用于不同的应用程序之间实现数据共享的功能.Content Provider的数据源不止包括SQLite数据库,还可以是文件数据.通过将数据储存层和应用层分离,Content Provider为各种数据源提供了一个通用的接口. 创建一个自己的Content Provider需要继承

【转】Android开发之旅:组件生命周期

组件生命周期(一) 引言 应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生命周期将讨论活动.服务.广播接收者的生命周期——包括在生命周期中他们可能的状态.通知状态改变的方法.及这些状态的组件寄宿的进程被终结和实例被销毁的可能性. 本文主要讨论活动的生命周期及他们可能的状态.通知状态改变的方法.分为以下三部分: 1.活动生命周期 2.保存活动状态 3.协

Android开发之Fragment详解

Android开发之Fragment学习 1.简介: Fragment是Android 3.0引入的新API. Fragment代表了 Activity的子模块,因此可以把Fragment理解成Activity片段.Fragment用于自己的生命周期,也可以接受它自己的输入事件. Fragment必须被"嵌入" Activity中使用,因此虽然Fragment也拥有自己的生命周期,但Fragment的生命周期会受它所在的Activity的生命周期的控制.例如,当Activity暂停时,

Android开发之AudioManager(音频管理器)详解

AudioManager简介: AudioManager类提供了访问音量和振铃器mode控制.使用Context.getSystemService(Context.AUDIO_SERVICE)来得到这个类的一个实例. 公有方法: Public Methods int abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl) 放弃音频的焦点. void adjustStreamVolume(int streamType, int dir

Android开发之WebService介绍

经常有网友问:“在Android平台如何调用WebService”?经过沟通我发现,甚至有些朋友连什么是WebSerivce都不知道就在问怎么使用,更别说和WebService有关的SOAP.WSDL这类“火星”名词了.所以,我就想在讲解Android平台如何调用WebSerivce之前,先来介绍下WebService,看看它到底有多神秘.      记得我的硕士论文题目中就包含“Web Service”这个词,当时还是花了大量时间去研究Web Service在系统集成.企业应用整合方面的应用:

Android开发之Handler的使用方法(源代码分享)

Handler主要接受子线程发送的数据, 并用此数据配合主线程更新UI.. 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发.比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作.  如果此时需要一个耗时的操作,例如: 联网读取数据或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,,会收到An

android开发之Animations的使用(三)

android开发之Animations的使用(三) 本博文主要讲述的是,Animations在android开发中的用来循环播放动画的效果: MainActivity.java: package com.example.animationtest3; import android.os.Bundle; import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.v

Android开发之onClick事件的两种主要形式

第一种也是最常用的形式:通过为onClick事件添加监听器,来激发当按钮被单击时应该处理的事件.如: btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "" + "通过为onClick()事件添加监听器的方式&quo