Android菜单—Menu

菜单是常用的用户界面元素,在Android系统里提供了3种类型的菜单。

(1)选项菜单(options menu):按设备上Menu 键显示的菜单。

(2)上下文菜单(context menu):长按特定界面view显示,跟具体的 view 绑定在一起,类似PC上鼠标右键菜单。

(3)子菜单(sub menu):以上两种菜单都可以加入子菜单,但子菜单不能再嵌套子菜单。

下面我们通过一个例子来演示3种菜单的基本用法。

菜单的XML资源文件放在res/menu目录下。

optionmenu.xml

1.   <?xml version="1.0" encoding="utf-8"?>

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

3.   <item android:id="@+id/optionitem1"

4.   android:icon="@drawable/icon"

5.   android:title="选项1" />

6.   <item android:id="@+id/optionitem2"

7.   android:icon="@drawable/ic_launcher"

8.   android:title="选项2" />

9.   <item android:id="@+id/optionitem3"

10.  android:icon="@drawable/icon"

11.  android:title="子菜单" >

12.  <menu>

13.  <item android:id="@+id/subitem1"

14.  android:title="子菜单项1" />

15.  <item android:id="@+id/subitem2"

16.  android:title="@string/子菜单项2" />

17.  </menu>

18.  </item>

19.  </menu>

在这个菜单资源文件里,定义了3个菜单项,id分别为optionitem1、optionitem2和optionitem3。每个菜单项item有自己的id、title和icon。

第9~18行的optionitem3菜单项里除了定义了id、title和icon外,还增加了第12~17行所示的子菜单结构。子菜单的item只有id和title,不能设置icon。

上下文菜单资源文件。

contextmenu.xml

1.   <?xml version="1.0" encoding="utf-8"?>

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

3.   <item

4.   android:id="@+id/contextitem1"

5.   android:title="上下文菜单子项1">

6.   </item>

7.   <item

8.   android:id="@+id/contextitem2"

9.   android:title="上下文菜单子项2">

10.  </item>

11.  <item

12.  android:id="@+id/contextitem3"

13.  android:title="上下文菜单子项3">

14.  </item>

15.  </menu>

上下文菜单的格式和子菜单格式类似,item项没有icon属性。

菜单例子的Java源代码如下。

Mymenu.java

1.   @Override

2.   public void onCreate(Bundle savedInstanceState) {

3.   super.onCreate(savedInstanceState);

4.   setContentView(R.layout.main);

5.   GridView gridview;

6.   String[] titles={"赵1","钱2","张三","李四","王五"};

7.   int buf=R.drawable.sample;

8.   int[] resIds={buf,buf,buf,buf,buf};

9.   gridview=(GridView)this.findViewById(R.id.gridview);

10.  gridview.setAdapter(new MyAdapter(titles,resIds));

11.  registerForContextMenu(gridview) ;

12.  gridview.setOnItemClickListener(new AdapterView.OnItemClickListener(){

13.  ......});}

14.  @Override

15.  public void onCreateContextMenu(ContextMenu menu,View

v,ContextMenu.ContextMenuInfo menuInfo){

16.  super.onCreateContextMenu(menu,v,menuInfo);

17.  getMenuInflater().inflate(R.menu.contextmenu,menu);

18.  }

19.  @Override

20.  public boolean onContextItemSelected (MenuItem item) {

21.  super.onContextItemSelected(item);

22.  switch (item.getItemId()) {

23.  case R.id.contextitem1:

24.  Toast.makeText(this, "上下文菜单子项1", Toast.LENGTH_SHORT).show();

25.  break;

26.  case R.id.contextitem2:

27.  Toast.makeText(this, "上下文菜单子项2", Toast.LENGTH_SHORT).show();

28.  break;

29.  case R.id.contextitem3:

30.  Toast.makeText(this, "上下文菜单子项3", Toast.LENGTH_SHORT).show();

31.  break;

32.  default:

33.  break;

34.  }

35.  return  super.onOptionsItemSelected(item);

36.  }

37.  @Override

38.  public boolean onCreateOptionsMenu(Menu menu) {

39.  super.onCreateOptionsMenu(menu);

40.  getMenuInflater().inflate(R.menu.optionmenu, menu);

41.  return true;

42.  }

43.  @Override

44.  public boolean onOptionsItemSelected(MenuItem item)

45.  {

46.  switch (item.getItemId())

47.  {

48.  case R.id.optionitem1:

49.  Toast.makeText(this, "单击了选项1", Toast.LENGTH_SHORT).show();

50.  return true;

51.  case R.id.optionitem2:

52.  Toast.makeText(this, "单击了选项2", Toast.LENGTH_SHORT).show();

53.  return true;

54.  case R.id.optionitem3:

55.  Toast.makeText(this, "单击了选项3", Toast.LENGTH_SHORT).show();

56.  return true;

57.  case R.id.subitem1:

58.  Toast.makeText(this, "单击子菜单选项1", Toast.LENGTH_SHORT).show();

59.  return true;

60.  case R.id.subitem2:

61.  Toast.makeText(this, "单击子菜单选项2", Toast.LENGTH_SHORT).show();

62.  return true;

63.  default:

64.  return super.onOptionsItemSelected(item);

65.  }}

66.  public class MyAdapter extends BaseAdapter {

67.  ......}}

第11行registerForContextMenu(gridview),我们为gridview注册了一个上下文菜单,当gridview里的itemview接收到长按事件时就会弹出一个上下文菜单。

第14~18行我们重写了onCreateContextMenu这个创建上下文菜单的回调方法。上下文菜单每次触发显示时都会调用这个方法。

第17行我们使用getMenuInflater().inflate方法装载菜单资源XML文件contextmenu到menu对象里,这个menu对象是由onCreateContextMenu回调函数传入的上下文菜单对象。

第19~36行的onContextItemSelected方法是当用户选择了上下文菜单中的选项时系统回调的方法,系统会传入用户选择的MenuItem对象。通过item.getItemId()我们知道用户选的菜单项的id号。在这里我们用toast显示用户的选择信息。

第37~42行onCreateOptionsMenu是创建选项菜单的回调方法,系统在第一次创建选项菜单时调用该方法。我们重写了该方法将菜单资源optionmenu加载到选项菜单。

第43~65行是选项菜单的item响应回调函数,同样我们通过item.getItemId()获取选项id号。

运行效果图如图10-14、图10-15、图10-16和图10-17所示。

▲图10-14  选项菜单图示                        ▲图10-15  单击选项2后的图示

▲图10-16  子菜单图示                                ▲图10-17  上下文菜单图示

时间: 2024-10-13 16:14:39

Android菜单—Menu的相关文章

Android菜单menu控件大全

下载:http://www.see-source.com/androidwidget/list.html?type=16 Android-NewPopupMenu使用PopupWindow实现的Popup菜单2015-08-07 更新下载: 0次   浏览 1次 MenuAnimation可以弹出子菜单的Menu2015-08-07 更新下载: 0次   浏览 1次 ExpandableButtonMenu弹出menu菜单的效果2015-08-07 更新下载: 0次   浏览 1次 Circul

Android菜单Menu的创建

在res目录下的menu文件夹下创建一个main.xml文件,内容如下: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add_item" android:title="Add&q

Android 菜单 Menu

@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // getMenuInflater().inflate(R.menu.main, menu); MenuItem menuSys = menu.add(1001, 100, 1, "系統菜单"); menuSys.setTit

Android菜单详解(一)——理解android中的Menu

前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至今为止看到的最好的一本android书,中文版出到<精通Android 2>. 理解Android的菜单 菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机甚至都要有一个"Menu"键,由此可见菜单在Android程序中的特殊性.An

Android添加Menu菜单

在安卓中添加Menu菜单十分简单. 步骤: 1.在menu文件夹中的main.xml文件中添加要添加的项目. <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.menu.MainActivity" > <

处女男学Android(十二)---Android 菜单(Menu)详解与应用

一.前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/42170771 本篇blog将记录一下Android中菜单的使用方法,虽然在新版本中推荐使用ActionBar去替代菜单,但我认为菜单依然是挺不错的一种UI交互组件,比ActionBar好点一些,对于手指不灵活的人比起来ActionBar右上角的那个方块小按钮,或许ta会更喜欢Menu呢,废话不多说,下面就具体介绍一下Android中关于Menu的使用方法. 二.创建第一

Android菜单详解——理解android中的Menu

Android菜单详解--理解android中的Menu 前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至今为止看到的最好的一本android书,中文版出到<精通Android 2>. 理解Android的菜单 菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机甚至都要有一个"Menu&qu

第四十一讲:Android之Menu菜单(二)

春蚕到死丝方尽,人至期颐亦不休.一息尚存须努力,留作青年好范畴.-- 吴玉章 本讲内容:子菜单 SubMenu android中点击子菜单将弹出悬浮窗口显示子菜单项.子菜单不支持嵌套,即子菜单中不能再包括其他子菜单. 我们通过一个例子感受一下,代码的讲解都写在注释里了 下面是MainActivity.java主界面文件: public class MainActivity extends Activity { @Override protected void onCreate(Bundle sa

Android菜单应用(Menu)

整体运行效果如下图: 具体实现: 1.创建过程,工程名为Menu 2.在工程目录“res/menu”目录下创建一个名为menu.xml的文件,内容如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="http://schemas.android.com/apk/res/android" > 3 <item 4 android:id=&q