菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu),今天这讲是OptionsMenu
一、概述
public boolean onCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu 。
public boolean onOptionsItemSelected(MenuItem item):选中菜单项后发生的动作。
public void onOptionsMenuClosed(Menu menu):菜单关闭后发生的动作。
public boolean onPrepareOptionsMenu(Menu menu):选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。
public boolean onMenuOpened(int featureId, Menu menu):单打开后发生的动作。
二、默认样式
默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。下面介绍。
1.main.xml
- 01.<?xml version="1.0" encoding="utf-8"?>
- 02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- 03. android:orientation="vertical" android:layout_width="fill_parent"
- 04. android:layout_height="fill_parent" >
- 05.
- 06. <TextView android:layout_width="wrap_content"
- 07. android:layout_height="wrap_content" android:text="请点击 Menu键显示选项菜单"
- 08. android:id="@+id/TextView02" />
- 09.
- 10.</LinearLayout>
2。重载onCreateOptionsMenu(Menu menu)方法 重载onCreateOptionsMenu(Menu menu)方法,并在此方法中添加菜单项,最后返回true,如果false,菜单则不会显示。 public boolean onCreateOptionsMenu(Menu menu)
- 01.@Override
- 02. public boolean onCreateOptionsMenu(Menu menu) {
- 03. /*
- 04. *
- 05. * add()方法的四个参数,依次是:
- 06. *
- 07. * 1、组别,如果不分组的话就写Menu.NONE,
- 08. *
- 09. * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
- 10. *
- 11. * 3、顺序,那个菜单现在在前面由这个参数的大小决定
- 12. *
- 13. * 4、文本,菜单的显示文本
- 14. */
- 15.
- 16. menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除").setIcon(
- 17.
- 18. android.R.drawable.ic_menu_delete);
- 19.
- 20. // setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以
- 21.
- 22. // android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
- 23.
- 24. menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon(
- 25.
- 26. android.R.drawable.ic_menu_edit);
- 27.
- 28. menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon(
- 29.
- 30. android.R.drawable.ic_menu_help);
- 31.
- 32. menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(
- 33.
- 34. android.R.drawable.ic_menu_add);
- 35.
- 36. menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon(
- 37.
- 38. android.R.drawable.ic_menu_info_details);
- 39.
- 40. menu.add(Menu.NONE, Menu.FIRST + 6, 3, "发送").setIcon(
- 41.
- 42. android.R.drawable.ic_menu_send);
- 43.
- 44. return true;
- 45.
- 46. }
- 复制代码
- 3。为菜单项注册事件 使用onOptionsItemSelected(MenuItem item)方法为菜单项注册事件 public boolean onOptionsItemSelected(MenuItem item)
- 01.@Override
- 02. public boolean onOptionsItemSelected(MenuItem item) {
- 03. switch (item.getItemId()) {
- 04.
- 05. case Menu.FIRST + 1:
- 06.
- 07. Toast.makeText(this, "删除菜单被点击了", Toast.LENGTH_LONG).show();
- 08.
- 09. break;
- 10.
- 11. case Menu.FIRST + 2:
- 12.
- 13. Toast.makeText(this, "保存菜单被点击了", Toast.LENGTH_LONG).show();
- 14.
- 15. break;
- 16.
- 17. case Menu.FIRST + 3:
- 18.
- 19. Toast.makeText(this, "帮助菜单被点击了", Toast.LENGTH_LONG).show();
- 20.
- 21. break;
- 22.
- 23. case Menu.FIRST + 4:
- 24.
- 25. Toast.makeText(this, "添加菜单被点击了", Toast.LENGTH_LONG).show();
- 26.
- 27. break;
- 28.
- 29. case Menu.FIRST + 5:
- 30.
- 31. Toast.makeText(this, "详细菜单被点击了", Toast.LENGTH_LONG).show();
- 32.
- 33. break;
- 34.
- 35. case Menu.FIRST + 6:
- 36.
- 37. Toast.makeText(this, "发送菜单被点击了", Toast.LENGTH_LONG).show();
- 38.
- 39. break;
- 40.
- 41. }
- 42.
- 43. return false;
- 44.
- 45. }
- 01.package com.wjq.menu;
- 02.
- 03.import android.app.Activity;
- 04.import android.os.Bundle;
- 05.import android.view.Menu;
- 06.import android.view.MenuItem;
- 07.import android.widget.Toast;
- 08.
- 09.public class DefaultMenu extends Activity {
- 10. /** Called when the activity is first created. */
- 11. @Override
- 12. public void onCreate(Bundle savedInstanceState) {
- 13. super.onCreate(savedInstanceState);
- 14. setContentView(R.layout.main);
- 15. }
- 16.
- 17. @Override
- 18. public boolean onCreateOptionsMenu(Menu menu) {
- 19. /*
- 20. *
- 21. * add()方法的四个参数,依次是:
- 22. *
- 23. * 1、组别,如果不分组的话就写Menu.NONE,
- 24. *
- 25. * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
- 26. *
- 27. * 3、顺序,那个菜单现在在前面由这个参数的大小决定
- 28. *
- 29. * 4、文本,菜单的显示文本
- 30. */
- 31.
- 32. menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除").setIcon(
- 33.
- 34. android.R.drawable.ic_menu_delete);
- 35.
- 36. // setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以
- 37.
- 38. // android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
- 39.
- 40. menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon(
- 41.
- 42. android.R.drawable.ic_menu_edit);
- 43.
- 44. menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon(
- 45.
- 46. android.R.drawable.ic_menu_help);
- 47.
- 48. menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(
- 49.
- 50. android.R.drawable.ic_menu_add);
- 51.
- 52. menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon(
- 53.
- 54. android.R.drawable.ic_menu_info_details);
- 55.
- 56. menu.add(Menu.NONE, Menu.FIRST + 6, 3, "发送").setIcon(
- 57.
- 58. android.R.drawable.ic_menu_send);
- 59.
- 60. return true;
- 61.
- 62. }
- 63.
- 64. @Override
- 65. public boolean onOptionsItemSelected(MenuItem item) {
- 66. switch (item.getItemId()) {
- 67.
- 68. case Menu.FIRST + 1:
- 69.
- 70. Toast.makeText(this, "删除菜单被点击了", Toast.LENGTH_LONG).show();
- 71.
- 72. break;
- 73.
- 74. case Menu.FIRST + 2:
- 75.
- 76. Toast.makeText(this, "保存菜单被点击了", Toast.LENGTH_LONG).show();
- 77.
- 78. break;
- 79.
- 80. case Menu.FIRST + 3:
- 81.
- 82. Toast.makeText(this, "帮助菜单被点击了", Toast.LENGTH_LONG).show();
- 83.
- 84. break;
- 85.
- 86. case Menu.FIRST + 4:
- 87.
- 88. Toast.makeText(this, "添加菜单被点击了", Toast.LENGTH_LONG).show();
- 89.
- 90. break;
- 91.
- 92. case Menu.FIRST + 5:
- 93.
- 94. Toast.makeText(this, "详细菜单被点击了", Toast.LENGTH_LONG).show();
- 95.
- 96. break;
- 97.
- 98. case Menu.FIRST + 6:
- 99.
- 100. Toast.makeText(this, "发送菜单被点击了", Toast.LENGTH_LONG).show();
- 101.
- 102. break;
- 103.
- 104. }
- 105.
- 106. return false;
- 107.
- 108. }
- 109.
- 110. @Override
- 111. public void onOptionsMenuClosed(Menu menu) {
- 112. Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show();
- 113. }
- 114.
- 115. @Override
- 116. public boolean onPrepareOptionsMenu(Menu menu) {
- 117. Toast.makeText(this,
- 118. "选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单",
- 119. Toast.LENGTH_LONG).show();
- 120.
- 121. // 如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用
- 122.
- 123. return true;
- 124.
- 125. }
- 126.}
本文详细介绍Android中的选项菜单(OptionsMenu),包括其创建、显示及事件处理等核心方法,并提供了完整的示例代码。
1399

被折叠的 条评论
为什么被折叠?



