Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 231|回复: 0

[默认分类] Android 菜单(OptionMenu)大全 建立你自己的菜单

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-7 14:37:27 | 显示全部楼层 |阅读模式
      菜单是用户界面中最常见的元素之一,使用非常频繁,在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.    
    2.     <?
    3.     xml version
    4.     =
    5.     "
    6.     1.0
    7.     "
    8.      encoding
    9.     =
    10.     "
    11.     utf-8
    12.     "
    13.     ?>
    14.    
    15.     <
    16.     LinearLayout xmlns:android
    17.     =
    18.     "
    19.     http://schemas.android.com/apk/res/android
    20.     "
    21.    
    22. android:orientation
    23.     =
    24.     "
    25.     vertical
    26.     "
    27.      android:layout_width
    28.     =
    29.     "
    30.     fill_parent
    31.     "
    32.    
    33. android:layout_height
    34.     =
    35.     "
    36.     fill_parent
    37.     "
    38.      
    39.     >
    40.    
    41.     <
    42.     TextView android:layout_width
    43.     =
    44.     "
    45.     wrap_content
    46.     "
    47.    
    48. android:layout_height
    49.     =
    50.     "
    51.     wrap_content
    52.     "
    53.      android:text
    54.     =
    55.     "
    56.     请点击 Menu键显示选项菜单
    57.     "
    58.    
    59. android:id
    60.     =
    61.     "
    62.     @+id/TextView02
    63.     "
    64.      
    65.     />
    66.    
    67.     </
    68.     LinearLayout
    69.     >
    70.    
    复制代码


      2。重载onCreateOptionsMenu(Menu menu)方法
      重载onCreateOptionsMenu(Menu menu)方法,并在此方法中添加菜单项,最后返回true,如果false,菜单则不会显示。
      



    public boolean onCreateOptionsMenu(Menu menu)

    1.    
    2.     @Override
    3.     public
    4.      boolean onCreateOptionsMenu(Menu menu) {
    5.     /*
    6.    
    7. *
    8. * add()方法的四个参数,依次是:
    9. *
    10. * 1、组别,如果不分组的话就写Menu.NONE,
    11. *
    12. * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
    13. *
    14. * 3、顺序,那个菜单现在在前面由这个参数的大小决定
    15. *
    16. * 4、文本,菜单的显示文本
    17.     */
    18.    
    19. menu.add(Menu.NONE, Menu.FIRST
    20.     +
    21.      
    22.     1
    23.     ,
    24.     5
    25.     ,
    26.     "
    27.     删除
    28.     "
    29.     ).setIcon(
    30. android.R.drawable.ic_menu_delete);
    31.     //
    32.      setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以
    33.     //
    34.      android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
    35.    
    36.    
    37. menu.add(Menu.NONE, Menu.FIRST
    38.     +
    39.      
    40.     2
    41.     ,
    42.     2
    43.     ,
    44.     "
    45.     保存
    46.     "
    47.     ).setIcon(
    48. android.R.drawable.ic_menu_edit);
    49. menu.add(Menu.NONE, Menu.FIRST
    50.     +
    51.      
    52.     3
    53.     ,
    54.     6
    55.     ,
    56.     "
    57.     帮助
    58.     "
    59.     ).setIcon(
    60. android.R.drawable.ic_menu_help);
    61. menu.add(Menu.NONE, Menu.FIRST
    62.     +
    63.      
    64.     4
    65.     ,
    66.     1
    67.     ,
    68.     "
    69.     添加
    70.     "
    71.     ).setIcon(
    72. android.R.drawable.ic_menu_add);
    73. menu.add(Menu.NONE, Menu.FIRST
    74.     +
    75.      
    76.     5
    77.     ,
    78.     4
    79.     ,
    80.     "
    81.     详细
    82.     "
    83.     ).setIcon(
    84. android.R.drawable.ic_menu_info_details);
    85. menu.add(Menu.NONE, Menu.FIRST
    86.     +
    87.      
    88.     6
    89.     ,
    90.     3
    91.     ,
    92.     "
    93.     发送
    94.     "
    95.     ).setIcon(
    96. android.R.drawable.ic_menu_send);
    97.     return
    98.      
    99.     true
    100.     ;
    101. }
    102.    
    复制代码


      3。为菜单项注册事件
      使用onOptionsItemSelected(MenuItem item)方法为菜单项注册事件



    public boolean onOptionsItemSelected(MenuItem item)

    1.    
    2.     @Override
    3.     public
    4.      boolean onOptionsItemSelected(MenuItem item) {
    5.     switch
    6.      (item.getItemId()) {
    7.     case
    8.      Menu.FIRST
    9.     +
    10.      
    11.     1
    12.     :
    13. Toast.makeText(
    14.     this
    15.     ,
    16.     "
    17.     删除菜单被点击了
    18.     "
    19.     , Toast.LENGTH_LONG).show();
    20.     break
    21.     ;
    22.     case
    23.      Menu.FIRST
    24.     +
    25.      
    26.     2
    27.     :
    28. Toast.makeText(
    29.     this
    30.     ,
    31.     "
    32.     保存菜单被点击了
    33.     "
    34.     , Toast.LENGTH_LONG).show();
    35.     break
    36.     ;
    37.     case
    38.      Menu.FIRST
    39.     +
    40.      
    41.     3
    42.     :
    43. Toast.makeText(
    44.     this
    45.     ,
    46.     "
    47.     帮助菜单被点击了
    48.     "
    49.     , Toast.LENGTH_LONG).show();
    50.     break
    51.     ;
    52.     case
    53.      Menu.FIRST
    54.     +
    55.      
    56.     4
    57.     :
    58. Toast.makeText(
    59.     this
    60.     ,
    61.     "
    62.     添加菜单被点击了
    63.     "
    64.     , Toast.LENGTH_LONG).show();
    65.     break
    66.     ;
    67.     case
    68.      Menu.FIRST
    69.     +
    70.      
    71.     5
    72.     :
    73. Toast.makeText(
    74.     this
    75.     ,
    76.     "
    77.     详细菜单被点击了
    78.     "
    79.     , Toast.LENGTH_LONG).show();
    80.     break
    81.     ;
    82.     case
    83.      Menu.FIRST
    84.     +
    85.      
    86.     6
    87.     :
    88. Toast.makeText(
    89.     this
    90.     ,
    91.     "
    92.     发送菜单被点击了
    93.     "
    94.     , Toast.LENGTH_LONG).show();
    95.     break
    96.     ;
    97. }
    98.     return
    99.      
    100.     false
    101.     ;
    102. }
    103.    
    复制代码


      4。其他按需要重载
      完整代码



    DefaultMenu

    1.    
    2.     package com.wjq.menu;
    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.     public
    9.      
    10.     class
    11.      DefaultMenu extends Activity {
    12.     /*
    13.     * Called when the activity is first created.
    14.     */
    15.    
    16. @Override
    17.     public
    18.      
    19.     void
    20.      onCreate(Bundle savedInstanceState) {
    21. super.onCreate(savedInstanceState);
    22. setContentView(R.layout.main);
    23. }
    24. @Override
    25.     public
    26.      boolean onCreateOptionsMenu(Menu menu) {
    27.     /*
    28.    
    29. *
    30. * add()方法的四个参数,依次是:
    31. *
    32. * 1、组别,如果不分组的话就写Menu.NONE,
    33. *
    34. * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
    35. *
    36. * 3、顺序,那个菜单现在在前面由这个参数的大小决定
    37. *
    38. * 4、文本,菜单的显示文本
    39.     */
    40.    
    41. menu.add(Menu.NONE, Menu.FIRST
    42.     +
    43.      
    44.     1
    45.     ,
    46.     5
    47.     ,
    48.     "
    49.     删除
    50.     "
    51.     ).setIcon(
    52. android.R.drawable.ic_menu_delete);
    53.     //
    54.      setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以
    55.     //
    56.      android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
    57.    
    58.    
    59. menu.add(Menu.NONE, Menu.FIRST
    60.     +
    61.      
    62.     2
    63.     ,
    64.     2
    65.     ,
    66.     "
    67.     保存
    68.     "
    69.     ).setIcon(
    70. android.R.drawable.ic_menu_edit);
    71. menu.add(Menu.NONE, Menu.FIRST
    72.     +
    73.      
    74.     3
    75.     ,
    76.     6
    77.     ,
    78.     "
    79.     帮助
    80.     "
    81.     ).setIcon(
    82. android.R.drawable.ic_menu_help);
    83. menu.add(Menu.NONE, Menu.FIRST
    84.     +
    85.      
    86.     4
    87.     ,
    88.     1
    89.     ,
    90.     "
    91.     添加
    92.     "
    93.     ).setIcon(
    94. android.R.drawable.ic_menu_add);
    95. menu.add(Menu.NONE, Menu.FIRST
    96.     +
    97.      
    98.     5
    99.     ,
    100.     4
    101.     ,
    102.     "
    103.     详细
    104.     "
    105.     ).setIcon(
    106. android.R.drawable.ic_menu_info_details);
    107. menu.add(Menu.NONE, Menu.FIRST
    108.     +
    109.      
    110.     6
    111.     ,
    112.     3
    113.     ,
    114.     "
    115.     发送
    116.     "
    117.     ).setIcon(
    118. android.R.drawable.ic_menu_send);
    119.     return
    120.      
    121.     true
    122.     ;
    123. }
    124. @Override
    125.     public
    126.      boolean onOptionsItemSelected(MenuItem item) {
    127.     switch
    128.      (item.getItemId()) {
    129.     case
    130.      Menu.FIRST
    131.     +
    132.      
    133.     1
    134.     :
    135. Toast.makeText(
    136.     this
    137.     ,
    138.     "
    139.     删除菜单被点击了
    140.     "
    141.     , Toast.LENGTH_LONG).show();
    142.     break
    143.     ;
    144.     case
    145.      Menu.FIRST
    146.     +
    147.      
    148.     2
    149.     :
    150. Toast.makeText(
    151.     this
    152.     ,
    153.     "
    154.     保存菜单被点击了
    155.     "
    156.     , Toast.LENGTH_LONG).show();
    157.     break
    158.     ;
    159.     case
    160.      Menu.FIRST
    161.     +
    162.      
    163.     3
    164.     :
    165. Toast.makeText(
    166.     this
    167.     ,
    168.     "
    169.     帮助菜单被点击了
    170.     "
    171.     , Toast.LENGTH_LONG).show();
    172.     break
    173.     ;
    174.     case
    175.      Menu.FIRST
    176.     +
    177.      
    178.     4
    179.     :
    180. Toast.makeText(
    181.     this
    182.     ,
    183.     "
    184.     添加菜单被点击了
    185.     "
    186.     , Toast.LENGTH_LONG).show();
    187.     break
    188.     ;
    189.     case
    190.      Menu.FIRST
    191.     +
    192.      
    193.     5
    194.     :
    195. Toast.makeText(
    196.     this
    197.     ,
    198.     "
    199.     详细菜单被点击了
    200.     "
    201.     , Toast.LENGTH_LONG).show();
    202.     break
    203.     ;
    204.     case
    205.      Menu.FIRST
    206.     +
    207.      
    208.     6
    209.     :
    210. Toast.makeText(
    211.     this
    212.     ,
    213.     "
    214.     发送菜单被点击了
    215.     "
    216.     , Toast.LENGTH_LONG).show();
    217.     break
    218.     ;
    219. }
    220.     return
    221.      
    222.     false
    223.     ;
    224. }
    225. @Override
    226.     public
    227.      
    228.     void
    229.      onOptionsMenuClosed(Menu menu) {
    230. Toast.makeText(
    231.     this
    232.     ,
    233.     "
    234.     选项菜单关闭了
    235.     "
    236.     , Toast.LENGTH_LONG).show();
    237. }
    238. @Override
    239.     public
    240.      boolean onPrepareOptionsMenu(Menu menu) {
    241. Toast.makeText(
    242.     this
    243.     ,
    244.     "
    245.     选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单
    246.     "
    247.     ,
    248. Toast.LENGTH_LONG).show();
    249.     //
    250.      如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用
    251.    
    252.    
    253.     return
    254.      
    255.     true
    256.     ;
    257. }
    258. }
    259.    
    复制代码


    5.效果浏览
      
      三、自定义样式
      



    1.gridview_menu.xml

    1.    
    2.     <?
    3.     xml version
    4.     =
    5.     "
    6.     1.0
    7.     "
    8.      encoding
    9.     =
    10.     "
    11.     utf-8
    12.     "
    13.     ?>
    14.    
    15.     <
    16.     LinearLayout xmlns:android
    17.     =
    18.     "
    19.     http://schemas.android.com/apk/res/android
    20.     "
    21.    
    22. android:orientation
    23.     =
    24.     "
    25.     vertical
    26.     "
    27.    
    28. android:layout_width
    29.     =
    30.     "
    31.     fill_parent
    32.     "
    33.    
    34. android:layout_height
    35.     =
    36.     "
    37.     fill_parent
    38.     "
    39.    
    40.     >
    41.    
    42.     <
    43.     GridView
    44. android:id
    45.     =
    46.     "
    47.     @+id/gridview
    48.     "
    49.    
    50. android:layout_width
    51.     =
    52.     "
    53.     fill_parent
    54.     "
    55.    
    56. android:layout_height
    57.     =
    58.     "
    59.     fill_parent
    60.     "
    61.    
    62. android:numColumns
    63.     =
    64.     "
    65.     4
    66.     "
    67.    
    68. android:verticalSpacing
    69.     =
    70.     "
    71.     10dip
    72.     "
    73.    
    74. android:horizontalSpacing
    75.     =
    76.     "
    77.     10dip
    78.     "
    79.    
    80. android:stretchMode
    81.     =
    82.     "
    83.     columnWidth
    84.     "
    85.    
    86. android:gravity
    87.     =
    88.     "
    89.     center
    90.     "
    91.    
    92.     />
    93.    
    94.     </
    95.     LinearLayout
    96.     >
    97.    
    复制代码


       首先自定义菜单界面,我是GridView来包含菜单项,4列3行
      



    2.item_menu.xml

    1.    
    2.     <?
    3.     xml version
    4.     =
    5.     "
    6.     1.0
    7.     "
    8.      encoding
    9.     =
    10.     "
    11.     utf-8
    12.     "
    13.     ?>
    14.    
    15.     <
    16.     RelativeLayout xmlns:android
    17.     =
    18.     "
    19.     http://schemas.android.com/apk/res/android
    20.     "
    21.    
    22. android:id
    23.     =
    24.     "
    25.     @+id/RelativeLayout_Item
    26.     "
    27.    
    28. android:layout_width
    29.     =
    30.     "
    31.     fill_parent
    32.     "
    33.      android:layout_height
    34.     =
    35.     "
    36.     wrap_content
    37.     "
    38.    
    39. android:paddingBottom
    40.     =
    41.     "
    42.     5dip
    43.     "
    44.     >
    45.    
    46.     <
    47.     ImageView android:id
    48.     =
    49.     "
    50.     @+id/item_image
    51.     "
    52.    
    53. android:layout_centerHorizontal
    54.     =
    55.     "
    56.     true
    57.     "
    58.      android:layout_width
    59.     =
    60.     "
    61.     wrap_content
    62.     "
    63.    
    64. android:layout_height
    65.     =
    66.     "
    67.     wrap_content
    68.     "
    69.     ></
    70.     ImageView
    71.     >
    72.    
    73.     <
    74.     TextView android:layout_below
    75.     =
    76.     "
    77.     @id/item_image
    78.     "
    79.      android:id
    80.     =
    81.     "
    82.     @+id/item_text
    83.     "
    84.    
    85. android:layout_centerHorizontal
    86.     =
    87.     "
    88.     true
    89.     "
    90.      android:layout_width
    91.     =
    92.     "
    93.     wrap_content
    94.     "
    95.    
    96. android:layout_height
    97.     =
    98.     "
    99.     wrap_content
    100.     "
    101.      android:text
    102.     =
    103.     "
    104.     选项
    105.     "
    106.     ></
    107.     TextView
    108.     >
    109.    
    110.     </
    111.     RelativeLayout
    112.     >
    113.    
    复制代码


    菜单项的现实样式,一个图标和一个文字。
      3.定义
      



    代码

    1.    
    2.     private
    3.      boolean isMore
    4.     =
    5.      
    6.     false
    7.     ;
    8.     //
    9.      menu菜单翻页控制
    10.    
    11.      AlertDialog menuDialog;
    12.     //
    13.      menu菜单Dialog
    14.    
    15.      GridView menuGrid;
    16. View menuView;
    17.     private
    18.      final
    19.     int
    20.      ITEM_SEARCH
    21.     =
    22.      
    23.     0
    24.     ;
    25.     //
    26.      搜索
    27.    
    28.      
    29.     private
    30.      final
    31.     int
    32.      ITEM_FILE_MANAGER
    33.     =
    34.      
    35.     1
    36.     ;
    37.     //
    38.      文件管理
    39.    
    40.      
    41.     private
    42.      final
    43.     int
    44.      ITEM_DOWN_MANAGER
    45.     =
    46.      
    47.     2
    48.     ;
    49.     //
    50.      下载管理
    51.    
    52.      
    53.     private
    54.      final
    55.     int
    56.      ITEM_FULLSCREEN
    57.     =
    58.      
    59.     3
    60.     ;
    61.     //
    62.      全屏
    63.    
    64.      
    65.     private
    66.      final
    67.     int
    68.      ITEM_MORE
    69.     =
    70.      
    71.     11
    72.     ;
    73.     //
    74.      菜单
    75.    
    76.    
    77.     /*
    78.     * 菜单图片 *
    79.     */
    80.    
    81.     int
    82.     [] menu_image_array
    83.     =
    84.      { R.drawable.menu_search,
    85. R.drawable.menu_filemanager, R.drawable.menu_downmanager,
    86. R.drawable.menu_fullscreen, R.drawable.menu_inputurl,
    87. R.drawable.menu_bookmark, R.drawable.menu_bookmark_sync_import,
    88. R.drawable.menu_sharepage, R.drawable.menu_quit,
    89. R.drawable.menu_nightmode, R.drawable.menu_refresh,
    90. R.drawable.menu_more };
    91.     /*
    92.     * 菜单文字 *
    93.     */
    94.    
    95. String[] menu_name_array
    96.     =
    97.      {
    98.     "
    99.     搜索
    100.     "
    101.     ,
    102.     "
    103.     文件管理
    104.     "
    105.     ,
    106.     "
    107.     下载管理
    108.     "
    109.     ,
    110.     "
    111.     全屏
    112.     "
    113.     ,
    114.     "
    115.     网址
    116.     "
    117.     ,
    118.     "
    119.     书签
    120.     "
    121.     ,
    122.     "
    123.     加入书签
    124.     "
    125.     ,
    126.     "
    127.     分享页面
    128.     "
    129.     ,
    130.     "
    131.     退出
    132.     "
    133.     ,
    134.     "
    135.     夜间模式
    136.     "
    137.     ,
    138.     "
    139.     刷新
    140.     "
    141.     ,
    142.     "
    143.     更多
    144.     "
    145.      };
    146.     /*
    147.     * 菜单图片2 *
    148.     */
    149.    
    150.     int
    151.     [] menu_image_array2
    152.     =
    153.      { R.drawable.menu_auto_landscape,
    154. R.drawable.menu_penselectmodel, R.drawable.menu_page_attr,
    155. R.drawable.menu_novel_mode, R.drawable.menu_page_updown,
    156. R.drawable.menu_checkupdate, R.drawable.menu_checknet,
    157. R.drawable.menu_refreshtimer, R.drawable.menu_syssettings,
    158. R.drawable.menu_help, R.drawable.menu_about, R.drawable.menu_return };
    159.     /*
    160.     * 菜单文字2 *
    161.     */
    162.    
    163. String[] menu_name_array2
    164.     =
    165.      {
    166.     "
    167.     自动横屏
    168.     "
    169.     ,
    170.     "
    171.     笔选模式
    172.     "
    173.     ,
    174.     "
    175.     阅读模式
    176.     "
    177.     ,
    178.     "
    179.     浏览模式
    180.     "
    181.     ,
    182.     "
    183.     快捷翻页
    184.     "
    185.     ,
    186.     "
    187.     检查更新
    188.     "
    189.     ,
    190.     "
    191.     检查网络
    192.     "
    193.     ,
    194.     "
    195.     定时刷新
    196.     "
    197.     ,
    198.     "
    199.     设置
    200.     "
    201.     ,
    202.     "
    203.     帮助
    204.     "
    205.     ,
    206.     "
    207.     关于
    208.     "
    209.     ,
    210.     "
    211.     返回
    212.     "
    213.      };
    214.    
    复制代码





    4.public boolean onMenuOpened(int featureId, Menu menu)

    1.    
    2.     @Override
    3.     public
    4.      boolean onMenuOpened(
    5.     int
    6.      featureId, Menu menu) {
    7.     if
    8.      (menuDialog
    9.     ==
    10.      
    11.     null
    12.     ) {
    13. menuDialog
    14.     =
    15.      
    16.     new
    17.      AlertDialog.Builder(
    18.     this
    19.     ).setView(menuView).show();
    20. }
    21.     else
    22.      {
    23. menuDialog.show();
    24. }
    25.     return
    26.      
    27.     false
    28.     ;
    29.     //
    30.      返回为true 则显示系统menu
    31.    
    32.      }
    33.    
    复制代码


    如果第一次打开则设置视图,否则直接显示menuDialog视图。
      



    5.private SimpleAdapter getMenuAdapter(String[] menuNameArray,

    1.    
    2.     private
    3.      SimpleAdapter getMenuAdapter(String[] menuNameArray,
    4.     int
    5.     [] imageResourceArray) {
    6. ArrayList
    7.     <
    8.     HashMap
    9.     <
    10.     String, Object
    11.     >>
    12.      data
    13.     =
    14.      
    15.     new
    16.      ArrayList
    17.     <
    18.     HashMap
    19.     <
    20.     String, Object
    21.     >>
    22.     ();
    23.     for
    24.      (
    25.     int
    26.      i
    27.     =
    28.      
    29.     0
    30.     ; i
    31.     <
    32.      menuNameArray.length; i
    33.     ++
    34.     ) {
    35. HashMap
    36.     <
    37.     String, Object
    38.     >
    39.      map
    40.     =
    41.      
    42.     new
    43.      HashMap
    44.     <
    45.     String, Object
    46.     >
    47.     ();
    48. map.put(
    49.     "
    50.     itemImage
    51.     "
    52.     , imageResourceArray[i]);
    53. map.put(
    54.     "
    55.     itemText
    56.     "
    57.     , menuNameArray[i]);
    58. data.add(map);
    59. }
    60. SimpleAdapter simperAdapter
    61.     =
    62.      
    63.     new
    64.      SimpleAdapter(
    65.     this
    66.     , data,
    67. R.layout.item_menu,
    68.     new
    69.      String[] {
    70.     "
    71.     itemImage
    72.     "
    73.     ,
    74.     "
    75.     itemText
    76.     "
    77.      },
    78.     new
    79.      
    80.     int
    81.     [] { R.id.item_image, R.id.item_text });
    82.     return
    83.      simperAdapter;
    84. }
    85.    
    复制代码


    为菜单添加菜单项。



    6.public boolean onCreateOptionsMenu(Menu menu)

    1.    
    2.     @Override
    3.     public
    4.      boolean onCreateOptionsMenu(Menu menu) {
    5. menu.add(
    6.     "
    7.     menu
    8.     "
    9.     );
    10.     //
    11.      必须创建一项
    12.    
    13.      
    14.     return
    15.      super.onCreateOptionsMenu(menu);
    16. }
    17.    
    复制代码





    7.protected void onCreate(Bundle savedInstanceState)

    1.    
    2.     @Override
    3.     protected
    4.      
    5.     void
    6.      onCreate(Bundle savedInstanceState) {
    7.     //
    8.      TODO Auto-generated method stub
    9.    
    10.      super.onCreate(savedInstanceState);
    11. setContentView(R.layout.main);
    12. menuView
    13.     =
    14.      View.inflate(
    15.     this
    16.     , R.layout.gridview_menu,
    17.     null
    18.     );
    19.     //
    20.      创建AlertDialog
    21.    
    22.      menuDialog
    23.     =
    24.      
    25.     new
    26.      AlertDialog.Builder(
    27.     this
    28.     ).create();
    29. menuDialog.setView(menuView);
    30. menuDialog.setOnKeyListener(
    31.     new
    32.      OnKeyListener() {
    33.     public
    34.      boolean onKey(DialogInterface dialog,
    35.     int
    36.      keyCode,
    37. KeyEvent
    38.     event
    39.     ) {
    40.     if
    41.      (keyCode
    42.     ==
    43.      KeyEvent.KEYCODE_MENU)
    44.     //
    45.      监听按键
    46.    
    47.      dialog.dismiss();
    48.     return
    49.      
    50.     false
    51.     ;
    52. }
    53. });
    54. menuGrid
    55.     =
    56.      (GridView) menuView.findViewById(R.id.gridview);
    57. menuGrid.setAdapter(getMenuAdapter(menu_name_array, menu_image_array));
    58.     /*
    59.     * 监听menu选项 *
    60.     */
    61.    
    62. menuGrid.setOnItemClickListener(
    63.     new
    64.      OnItemClickListener() {
    65.     public
    66.      
    67.     void
    68.      onItemClick(AdapterView
    69.     <?>
    70.      arg0, View arg1,
    71.     int
    72.      arg2,
    73.     long
    74.      arg3) {
    75.     switch
    76.      (arg2) {
    77.     case
    78.      ITEM_SEARCH:
    79.     //
    80.      搜索
    81.    
    82.    
    83.     break
    84.     ;
    85.     case
    86.      ITEM_FILE_MANAGER:
    87.     //
    88.      文件管理
    89.    
    90.    
    91.     break
    92.     ;
    93.     case
    94.      ITEM_DOWN_MANAGER:
    95.     //
    96.      下载管理
    97.    
    98.    
    99.     break
    100.     ;
    101.     case
    102.      ITEM_FULLSCREEN:
    103.     //
    104.      全屏
    105.    
    106.    
    107.     break
    108.     ;
    109.     case
    110.      ITEM_MORE:
    111.     //
    112.      翻页
    113.    
    114.      
    115.     if
    116.      (isMore) {
    117. menuGrid.setAdapter(getMenuAdapter(menu_name_array2,
    118. menu_image_array2));
    119. isMore
    120.     =
    121.      
    122.     false
    123.     ;
    124. }
    125.     else
    126.      {
    127.     //
    128.      首页
    129.    
    130.      menuGrid.setAdapter(getMenuAdapter(menu_name_array,
    131. menu_image_array));
    132. isMore
    133.     =
    134.      
    135.     true
    136.     ;
    137. }
    138. menuGrid.invalidate();
    139.     //
    140.      更新menu
    141.    
    142.      menuGrid.setSelection(ITEM_MORE);
    143.     break
    144.     ;
    145. }
    146. }
    147. });
    148. }
    149.    
    复制代码





    完整代码

    1.    
    2.     package com.wjq.menu;
    3. import java.util.ArrayList;
    4. import java.util.HashMap;
    5. import android.app.Activity;
    6. import android.app.AlertDialog;
    7. import android.content.DialogInterface;
    8. import android.content.DialogInterface.OnKeyListener;
    9. import android.os.Bundle;
    10. import android.view.KeyEvent;
    11. import android.view.Menu;
    12. import android.view.View;
    13. import android.widget.AdapterView;
    14. import android.widget.GridView;
    15. import android.widget.SimpleAdapter;
    16. import android.widget.AdapterView.OnItemClickListener;
    17.     public
    18.      
    19.     class
    20.      CustomizeMenu extends Activity {
    21.     private
    22.      boolean isMore
    23.     =
    24.      
    25.     false
    26.     ;
    27.     //
    28.      menu菜单翻页控制
    29.    
    30.      AlertDialog menuDialog;
    31.     //
    32.      menu菜单Dialog
    33.    
    34.      GridView menuGrid;
    35. View menuView;
    36.     private
    37.      final
    38.     int
    39.      ITEM_SEARCH
    40.     =
    41.      
    42.     0
    43.     ;
    44.     //
    45.      搜索
    46.    
    47.      
    48.     private
    49.      final
    50.     int
    51.      ITEM_FILE_MANAGER
    52.     =
    53.      
    54.     1
    55.     ;
    56.     //
    57.      文件管理
    58.    
    59.      
    60.     private
    61.      final
    62.     int
    63.      ITEM_DOWN_MANAGER
    64.     =
    65.      
    66.     2
    67.     ;
    68.     //
    69.      下载管理
    70.    
    71.      
    72.     private
    73.      final
    74.     int
    75.      ITEM_FULLSCREEN
    76.     =
    77.      
    78.     3
    79.     ;
    80.     //
    81.      全屏
    82.    
    83.      
    84.     private
    85.      final
    86.     int
    87.      ITEM_MORE
    88.     =
    89.      
    90.     11
    91.     ;
    92.     //
    93.      菜单
    94.    
    95.    
    96.     /*
    97.     * 菜单图片 *
    98.     */
    99.    
    100.     int
    101.     [] menu_image_array
    102.     =
    103.      { R.drawable.menu_search,
    104. R.drawable.menu_filemanager, R.drawable.menu_downmanager,
    105. R.drawable.menu_fullscreen, R.drawable.menu_inputurl,
    106. R.drawable.menu_bookmark, R.drawable.menu_bookmark_sync_import,
    107. R.drawable.menu_sharepage, R.drawable.menu_quit,
    108. R.drawable.menu_nightmode, R.drawable.menu_refresh,
    109. R.drawable.menu_more };
    110.     /*
    111.     * 菜单文字 *
    112.     */
    113.    
    114. String[] menu_name_array
    115.     =
    116.      {
    117.     "
    118.     搜索
    119.     "
    120.     ,
    121.     "
    122.     文件管理
    123.     "
    124.     ,
    125.     "
    126.     下载管理
    127.     "
    128.     ,
    129.     "
    130.     全屏
    131.     "
    132.     ,
    133.     "
    134.     网址
    135.     "
    136.     ,
    137.     "
    138.     书签
    139.     "
    140.     ,
    141.     "
    142.     加入书签
    143.     "
    144.     ,
    145.     "
    146.     分享页面
    147.     "
    148.     ,
    149.     "
    150.     退出
    151.     "
    152.     ,
    153.     "
    154.     夜间模式
    155.     "
    156.     ,
    157.     "
    158.     刷新
    159.     "
    160.     ,
    161.     "
    162.     更多
    163.     "
    164.      };
    165.     /*
    166.     * 菜单图片2 *
    167.     */
    168.    
    169.     int
    170.     [] menu_image_array2
    171.     =
    172.      { R.drawable.menu_auto_landscape,
    173. R.drawable.menu_penselectmodel, R.drawable.menu_page_attr,
    174. R.drawable.menu_novel_mode, R.drawable.menu_page_updown,
    175. R.drawable.menu_checkupdate, R.drawable.menu_checknet,
    176. R.drawable.menu_refreshtimer, R.drawable.menu_syssettings,
    177. R.drawable.menu_help, R.drawable.menu_about, R.drawable.menu_return };
    178.     /*
    179.     * 菜单文字2 *
    180.     */
    181.    
    182. String[] menu_name_array2
    183.     =
    184.      {
    185.     "
    186.     自动横屏
    187.     "
    188.     ,
    189.     "
    190.     笔选模式
    191.     "
    192.     ,
    193.     "
    194.     阅读模式
    195.     "
    196.     ,
    197.     "
    198.     浏览模式
    199.     "
    200.     ,
    201.     "
    202.     快捷翻页
    203.     "
    204.     ,
    205.     "
    206.     检查更新
    207.     "
    208.     ,
    209.     "
    210.     检查网络
    211.     "
    212.     ,
    213.     "
    214.     定时刷新
    215.     "
    216.     ,
    217.     "
    218.     设置
    219.     "
    220.     ,
    221.     "
    222.     帮助
    223.     "
    224.     ,
    225.     "
    226.     关于
    227.     "
    228.     ,
    229.     "
    230.     返回
    231.     "
    232.      };
    233. @Override
    234.     protected
    235.      
    236.     void
    237.      onCreate(Bundle savedInstanceState) {
    238.     //
    239.      TODO Auto-generated method stub
    240.    
    241.      super.onCreate(savedInstanceState);
    242. setContentView(R.layout.main);
    243. menuView
    244.     =
    245.      View.inflate(
    246.     this
    247.     , R.layout.gridview_menu,
    248.     null
    249.     );
    250.     //
    251.      创建AlertDialog
    252.    
    253.      menuDialog
    254.     =
    255.      
    256.     new
    257.      AlertDialog.Builder(
    258.     this
    259.     ).create();
    260. menuDialog.setView(menuView);
    261. menuDialog.setOnKeyListener(
    262.     new
    263.      OnKeyListener() {
    264.     public
    265.      boolean onKey(DialogInterface dialog,
    266.     int
    267.      keyCode,
    268. KeyEvent
    269.     event
    270.     ) {
    271.     if
    272.      (keyCode
    273.     ==
    274.      KeyEvent.KEYCODE_MENU)
    275.     //
    276.      监听按键
    277.    
    278.      dialog.dismiss();
    279.     return
    280.      
    281.     false
    282.     ;
    283. }
    284. });
    285. menuGrid
    286.     =
    287.      (GridView) menuView.findViewById(R.id.gridview);
    288. menuGrid.setAdapter(getMenuAdapter(menu_name_array, menu_image_array));
    289.     /*
    290.     * 监听menu选项 *
    291.     */
    292.    
    293. menuGrid.setOnItemClickListener(
    294.     new
    295.      OnItemClickListener() {
    296.     public
    297.      
    298.     void
    299.      onItemClick(AdapterView
    300.     <?>
    301.      arg0, View arg1,
    302.     int
    303.      arg2,
    304.     long
    305.      arg3) {
    306.     switch
    307.      (arg2) {
    308.     case
    309.      ITEM_SEARCH:
    310.     //
    311.      搜索
    312.    
    313.    
    314.     break
    315.     ;
    316.     case
    317.      ITEM_FILE_MANAGER:
    318.     //
    319.      文件管理
    320.    
    321.    
    322.     break
    323.     ;
    324.     case
    325.      ITEM_DOWN_MANAGER:
    326.     //
    327.      下载管理
    328.    
    329.    
    330.     break
    331.     ;
    332.     case
    333.      ITEM_FULLSCREEN:
    334.     //
    335.      全屏
    336.    
    337.    
    338.     break
    339.     ;
    340.     case
    341.      ITEM_MORE:
    342.     //
    343.      翻页
    344.    
    345.      
    346.     if
    347.      (isMore) {
    348. menuGrid.setAdapter(getMenuAdapter(menu_name_array2,
    349. menu_image_array2));
    350. isMore
    351.     =
    352.      
    353.     false
    354.     ;
    355. }
    356.     else
    357.      {
    358.     //
    359.      首页
    360.    
    361.      menuGrid.setAdapter(getMenuAdapter(menu_name_array,
    362. menu_image_array));
    363. isMore
    364.     =
    365.      
    366.     true
    367.     ;
    368. }
    369. menuGrid.invalidate();
    370.     //
    371.      更新menu
    372.    
    373.      menuGrid.setSelection(ITEM_MORE);
    374.     break
    375.     ;
    376. }
    377. }
    378. });
    379. }
    380. @Override
    381.     public
    382.      boolean onCreateOptionsMenu(Menu menu) {
    383. menu.add(
    384.     "
    385.     menu
    386.     "
    387.     );
    388.     //
    389.      必须创建一项
    390.    
    391.      
    392.     return
    393.      super.onCreateOptionsMenu(menu);
    394. }
    395.     private
    396.      SimpleAdapter getMenuAdapter(String[] menuNameArray,
    397.     int
    398.     [] imageResourceArray) {
    399. ArrayList
    400.     <
    401.     HashMap
    402.     <
    403.     String, Object
    404.     >>
    405.      data
    406.     =
    407.      
    408.     new
    409.      ArrayList
    410.     <
    411.     HashMap
    412.     <
    413.     String, Object
    414.     >>
    415.     ();
    416.     for
    417.      (
    418.     int
    419.      i
    420.     =
    421.      
    422.     0
    423.     ; i
    424.     <
    425.      menuNameArray.length; i
    426.     ++
    427.     ) {
    428. HashMap
    429.     <
    430.     String, Object
    431.     >
    432.      map
    433.     =
    434.      
    435.     new
    436.      HashMap
    437.     <
    438.     String, Object
    439.     >
    440.     ();
    441. map.put(
    442.     "
    443.     itemImage
    444.     "
    445.     , imageResourceArray[i]);
    446. map.put(
    447.     "
    448.     itemText
    449.     "
    450.     , menuNameArray[i]);
    451. data.add(map);
    452. }
    453. SimpleAdapter simperAdapter
    454.     =
    455.      
    456.     new
    457.      SimpleAdapter(
    458.     this
    459.     , data,
    460. R.layout.item_menu,
    461.     new
    462.      String[] {
    463.     "
    464.     itemImage
    465.     "
    466.     ,
    467.     "
    468.     itemText
    469.     "
    470.      },
    471.     new
    472.      
    473.     int
    474.     [] { R.id.item_image, R.id.item_text });
    475.     return
    476.      simperAdapter;
    477. }
    478. @Override
    479.     public
    480.      boolean onMenuOpened(
    481.     int
    482.      featureId, Menu menu) {
    483.     if
    484.      (menuDialog
    485.     ==
    486.      
    487.     null
    488.     ) {
    489. menuDialog
    490.     =
    491.      
    492.     new
    493.      AlertDialog.Builder(
    494.     this
    495.     ).setView(menuView).show();
    496. }
    497.     else
    498.      {
    499. menuDialog.show();
    500. }
    501.     return
    502.      
    503.     false
    504.     ;
    505.     //
    506.      返回为true 则显示系统menu
    507.    
    508.      }
    509. }
    510.    
    复制代码


    原代码下载点击这里
    效果浏览
              
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-24 00:45 , Processed in 0.343871 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表