Android 菜单(OptionMenu)大全 建立你自己的菜单

本文详细介绍Android中的选项菜单(OptionsMenu),包括其创建、显示及事件处理等核心方法,并提供了完整的示例代码。


菜单是用户界面中最常见的元素之一,使用非常频繁,在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
  1. 01.<?xml version="1.0" encoding="utf-8"?>

  2. 02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  3. 03.    android:orientation="vertical" android:layout_width="fill_parent"

  4. 04.    android:layout_height="fill_parent" >

  5. 05.   

  6. 06.    <TextView android:layout_width="wrap_content"

  7. 07.        android:layout_height="wrap_content" android:text="请点击 Menu键显示选项菜单"

  8. 08.        android:id="@+id/TextView02" />

  9. 09.

  10. 10.</LinearLayout>
复制代码
复制代码
2。重载onCreateOptionsMenu(Menu menu)方法  重载onCreateOptionsMenu(Menu menu)方法,并在此方法中添加菜单项,最后返回true,如果false,菜单则不会显示。  public boolean onCreateOptionsMenu(Menu menu)
  1. 01.@Override

  2. 02.    public boolean onCreateOptionsMenu(Menu menu) {

  3. 03.        /*

  4. 04.         *

  5. 05.         * add()方法的四个参数,依次是:

  6. 06.         *

  7. 07.         * 1、组别,如果不分组的话就写Menu.NONE,

  8. 08.         *

  9. 09.         * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单

  10. 10.         *

  11. 11.         * 3、顺序,那个菜单现在在前面由这个参数的大小决定

  12. 12.         *

  13. 13.         * 4、文本,菜单的显示文本

  14. 14.         */

  15. 15.

  16. 16.        menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除").setIcon(

  17. 17.

  18. 18.        android.R.drawable.ic_menu_delete);

  19. 19.

  20. 20.        // setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以

  21. 21.

  22. 22.        // android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的

  23. 23.

  24. 24.        menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon(

  25. 25.

  26. 26.        android.R.drawable.ic_menu_edit);

  27. 27.

  28. 28.        menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon(

  29. 29.

  30. 30.        android.R.drawable.ic_menu_help);

  31. 31.

  32. 32.        menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(

  33. 33.

  34. 34.        android.R.drawable.ic_menu_add);

  35. 35.

  36. 36.        menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon(

  37. 37.

  38. 38.        android.R.drawable.ic_menu_info_details);

  39. 39.

  40. 40.        menu.add(Menu.NONE, Menu.FIRST + 6, 3, "发送").setIcon(

  41. 41.

  42. 42.        android.R.drawable.ic_menu_send);

  43. 43.

  44. 44.        return true;

  45. 45.

  46. 46.    }
  47. 复制代码
  48. 3。为菜单项注册事件  使用onOptionsItemSelected(MenuItem item)方法为菜单项注册事件  public boolean onOptionsItemSelected(MenuItem item)
  49. 01.@Override

  50. 02.    public boolean onOptionsItemSelected(MenuItem item) {

  51. 03.        switch (item.getItemId()) {

  52. 04.

  53. 05.        case Menu.FIRST + 1:

  54. 06.

  55. 07.            Toast.makeText(this, "删除菜单被点击了", Toast.LENGTH_LONG).show();

  56. 08.

  57. 09.            break;

  58. 10.

  59. 11.        case Menu.FIRST + 2:

  60. 12.

  61. 13.            Toast.makeText(this, "保存菜单被点击了", Toast.LENGTH_LONG).show();

  62. 14.

  63. 15.            break;

  64. 16.

  65. 17.        case Menu.FIRST + 3:

  66. 18.

  67. 19.            Toast.makeText(this, "帮助菜单被点击了", Toast.LENGTH_LONG).show();

  68. 20.

  69. 21.            break;

  70. 22.

  71. 23.        case Menu.FIRST + 4:

  72. 24.

  73. 25.            Toast.makeText(this, "添加菜单被点击了", Toast.LENGTH_LONG).show();

  74. 26.

  75. 27.            break;

  76. 28.

  77. 29.        case Menu.FIRST + 5:

  78. 30.

  79. 31.            Toast.makeText(this, "详细菜单被点击了", Toast.LENGTH_LONG).show();

  80. 32.

  81. 33.            break;

  82. 34.

  83. 35.        case Menu.FIRST + 6:

  84. 36.

  85. 37.            Toast.makeText(this, "发送菜单被点击了", Toast.LENGTH_LONG).show();

  86. 38.

  87. 39.            break;

  88. 40.

  89. 41.        }

  90. 42.

  91. 43.        return false;

  92. 44.

  93. 45.    }
复制代码
复制代码4。其他按需要重载  完整代码  DefaultMenu
  1. 01.package com.wjq.menu;

  2. 02.

  3. 03.import android.app.Activity;

  4. 04.import android.os.Bundle;

  5. 05.import android.view.Menu;

  6. 06.import android.view.MenuItem;

  7. 07.import android.widget.Toast;

  8. 08.

  9. 09.public class DefaultMenu extends Activity {

  10. 10.    /** Called when the activity is first created. */

  11. 11.    @Override

  12. 12.    public void onCreate(Bundle savedInstanceState) {

  13. 13.        super.onCreate(savedInstanceState);

  14. 14.        setContentView(R.layout.main);

  15. 15.    }

  16. 16.

  17. 17.    @Override

  18. 18.    public boolean onCreateOptionsMenu(Menu menu) {

  19. 19.        /*

  20. 20.         *

  21. 21.         * add()方法的四个参数,依次是:

  22. 22.         *

  23. 23.         * 1、组别,如果不分组的话就写Menu.NONE,

  24. 24.         *

  25. 25.         * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单

  26. 26.         *

  27. 27.         * 3、顺序,那个菜单现在在前面由这个参数的大小决定

  28. 28.         *

  29. 29.         * 4、文本,菜单的显示文本

  30. 30.         */

  31. 31.

  32. 32.        menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除").setIcon(

  33. 33.

  34. 34.        android.R.drawable.ic_menu_delete);

  35. 35.

  36. 36.        // setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以

  37. 37.

  38. 38.        // android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的

  39. 39.

  40. 40.        menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon(

  41. 41.

  42. 42.        android.R.drawable.ic_menu_edit);

  43. 43.

  44. 44.        menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon(

  45. 45.

  46. 46.        android.R.drawable.ic_menu_help);

  47. 47.

  48. 48.        menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(

  49. 49.

  50. 50.        android.R.drawable.ic_menu_add);

  51. 51.

  52. 52.        menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon(

  53. 53.

  54. 54.        android.R.drawable.ic_menu_info_details);

  55. 55.

  56. 56.        menu.add(Menu.NONE, Menu.FIRST + 6, 3, "发送").setIcon(

  57. 57.

  58. 58.        android.R.drawable.ic_menu_send);

  59. 59.

  60. 60.        return true;

  61. 61.

  62. 62.    }

  63. 63.

  64. 64.    @Override

  65. 65.    public boolean onOptionsItemSelected(MenuItem item) {

  66. 66.        switch (item.getItemId()) {

  67. 67.

  68. 68.        case Menu.FIRST + 1:

  69. 69.

  70. 70.            Toast.makeText(this, "删除菜单被点击了", Toast.LENGTH_LONG).show();

  71. 71.

  72. 72.            break;

  73. 73.

  74. 74.        case Menu.FIRST + 2:

  75. 75.

  76. 76.            Toast.makeText(this, "保存菜单被点击了", Toast.LENGTH_LONG).show();

  77. 77.

  78. 78.            break;

  79. 79.

  80. 80.        case Menu.FIRST + 3:

  81. 81.

  82. 82.            Toast.makeText(this, "帮助菜单被点击了", Toast.LENGTH_LONG).show();

  83. 83.

  84. 84.            break;

  85. 85.

  86. 86.        case Menu.FIRST + 4:

  87. 87.

  88. 88.            Toast.makeText(this, "添加菜单被点击了", Toast.LENGTH_LONG).show();

  89. 89.

  90. 90.            break;

  91. 91.

  92. 92.        case Menu.FIRST + 5:

  93. 93.

  94. 94.            Toast.makeText(this, "详细菜单被点击了", Toast.LENGTH_LONG).show();

  95. 95.

  96. 96.            break;

  97. 97.

  98. 98.        case Menu.FIRST + 6:

  99. 99.

  100. 100.            Toast.makeText(this, "发送菜单被点击了", Toast.LENGTH_LONG).show();

  101. 101.

  102. 102.            break;

  103. 103.

  104. 104.        }

  105. 105.

  106. 106.        return false;

  107. 107.

  108. 108.    }

  109. 109.

  110. 110.    @Override

  111. 111.    public void onOptionsMenuClosed(Menu menu) {

  112. 112.        Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show();

  113. 113.    }

  114. 114.

  115. 115.    @Override

  116. 116.    public boolean onPrepareOptionsMenu(Menu menu) {

  117. 117.        Toast.makeText(this,

  118. 118.                "选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单",

  119. 119.                Toast.LENGTH_LONG).show();

  120. 120.

  121. 121.        // 如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用

  122. 122.

  123. 123.        return true;

  124. 124.

  125. 125.    }

  126. 126.}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值