阅读更多

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

  菜单是用户界面中最常见的元素之一,使用非常频繁,在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
                                                    <?                            xml version                            =                            "                            1.0                            "                             encoding                            =                            "                            utf-8                            "                            ?>                                                        <                            LinearLayout xmlns:android                            =                            "                            http://schemas.android.com/apk/res/android                            "                                android:orientation                            =                            "                            vertical                            "                             android:layout_width                            =                            "                            fill_parent                            "                                android:layout_height                            =                            "                            fill_parent                            "                                                         >                                                                <                            TextView android:layout_width                            =                            "                            wrap_content                            "                                    android:layout_height                            =                            "                            wrap_content                            "                             android:text                            =                            "                            请点击 Menu键显示选项菜单                            "                                    android:id                            =                            "                            @+id/TextView02                            "                                                         />                                                                                    LinearLayout                            >                        

  2。重载onCreateOptionsMenu(Menu menu)方法

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

  

public boolean onCreateOptionsMenu(Menu menu)
                                                    @Override                                public                             boolean onCreateOptionsMenu(Menu menu) {                                    /*                                     *          * add()方法的四个参数,依次是:         *          * 1、组别,如果不分组的话就写Menu.NONE,         *          * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单         *          * 3、顺序,那个菜单现在在前面由这个参数的大小决定         *          * 4、文本,菜单的显示文本                                     */                                    menu.add(Menu.NONE, Menu.FIRST                             +                                                         1                            ,                             5                            ,                             "                            删除                            "                            ).setIcon(        android.R.drawable.ic_menu_delete);                                    //                             setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以                                    //                             android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的                                                                menu.add(Menu.NONE, Menu.FIRST                             +                                                         2                            ,                             2                            ,                             "                            保存                            "                            ).setIcon(        android.R.drawable.ic_menu_edit);        menu.add(Menu.NONE, Menu.FIRST                             +                                                         3                            ,                             6                            ,                             "                            帮助                            "                            ).setIcon(        android.R.drawable.ic_menu_help);        menu.add(Menu.NONE, Menu.FIRST                             +                                                         4                            ,                             1                            ,                             "                            添加                            "                            ).setIcon(        android.R.drawable.ic_menu_add);        menu.add(Menu.NONE, Menu.FIRST                             +                                                         5                            ,                             4                            ,                             "                            详细                            "                            ).setIcon(        android.R.drawable.ic_menu_info_details);        menu.add(Menu.NONE, Menu.FIRST                             +                                                         6                            ,                             3                            ,                             "                            发送                            "                            ).setIcon(        android.R.drawable.ic_menu_send);                                    return                                                         true                            ;    }                        

  3。为菜单项注册事件

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

public boolean onOptionsItemSelected(MenuItem item)
                                                    @Override                                public                             boolean onOptionsItemSelected(MenuItem item) {                                    switch                             (item.getItemId()) {                                    case                             Menu.FIRST                             +                                                         1                            :            Toast.makeText(                            this                            ,                             "                            删除菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;                                    case                             Menu.FIRST                             +                                                         2                            :            Toast.makeText(                            this                            ,                             "                            保存菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;                                    case                             Menu.FIRST                             +                                                         3                            :            Toast.makeText(                            this                            ,                             "                            帮助菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;                                    case                             Menu.FIRST                             +                                                         4                            :            Toast.makeText(                            this                            ,                             "                            添加菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;                                    case                             Menu.FIRST                             +                                                         5                            :            Toast.makeText(                            this                            ,                             "                            详细菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;                                    case                             Menu.FIRST                             +                                                         6                            :            Toast.makeText(                            this                            ,                             "                            发送菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;        }                                    return                                                         false                            ;    }                        

  4。其他按需要重载

  完整代码

DefaultMenu
                                                    package com.wjq.menu;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;                            public                                                         class                             DefaultMenu extends Activity {                                /*                            * Called when the activity is first created.                             */                                @Override                                public                                                         void                             onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    }    @Override                                public                             boolean onCreateOptionsMenu(Menu menu) {                                    /*                                     *          * add()方法的四个参数,依次是:         *          * 1、组别,如果不分组的话就写Menu.NONE,         *          * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单         *          * 3、顺序,那个菜单现在在前面由这个参数的大小决定         *          * 4、文本,菜单的显示文本                                     */                                    menu.add(Menu.NONE, Menu.FIRST                             +                                                         1                            ,                             5                            ,                             "                            删除                            "                            ).setIcon(        android.R.drawable.ic_menu_delete);                                    //                             setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以                                    //                             android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的                                                                menu.add(Menu.NONE, Menu.FIRST                             +                                                         2                            ,                             2                            ,                             "                            保存                            "                            ).setIcon(        android.R.drawable.ic_menu_edit);        menu.add(Menu.NONE, Menu.FIRST                             +                                                         3                            ,                             6                            ,                             "                            帮助                            "                            ).setIcon(        android.R.drawable.ic_menu_help);        menu.add(Menu.NONE, Menu.FIRST                             +                                                         4                            ,                             1                            ,                             "                            添加                            "                            ).setIcon(        android.R.drawable.ic_menu_add);        menu.add(Menu.NONE, Menu.FIRST                             +                                                         5                            ,                             4                            ,                             "                            详细                            "                            ).setIcon(        android.R.drawable.ic_menu_info_details);        menu.add(Menu.NONE, Menu.FIRST                             +                                                         6                            ,                             3                            ,                             "                            发送                            "                            ).setIcon(        android.R.drawable.ic_menu_send);                                    return                                                         true                            ;    }    @Override                                public                             boolean onOptionsItemSelected(MenuItem item) {                                    switch                             (item.getItemId()) {                                    case                             Menu.FIRST                             +                                                         1                            :            Toast.makeText(                            this                            ,                             "                            删除菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;                                    case                             Menu.FIRST                             +                                                         2                            :            Toast.makeText(                            this                            ,                             "                            保存菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;                                    case                             Menu.FIRST                             +                                                         3                            :            Toast.makeText(                            this                            ,                             "                            帮助菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;                                    case                             Menu.FIRST                             +                                                         4                            :            Toast.makeText(                            this                            ,                             "                            添加菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;                                    case                             Menu.FIRST                             +                                                         5                            :            Toast.makeText(                            this                            ,                             "                            详细菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;                                    case                             Menu.FIRST                             +                                                         6                            :            Toast.makeText(                            this                            ,                             "                            发送菜单被点击了                            "                            , Toast.LENGTH_LONG).show();                                        break                            ;        }                                    return                                                         false                            ;    }    @Override                                public                                                         void                             onOptionsMenuClosed(Menu menu) {        Toast.makeText(                            this                            ,                             "                            选项菜单关闭了                            "                            , Toast.LENGTH_LONG).show();    }    @Override                                public                             boolean onPrepareOptionsMenu(Menu menu) {        Toast.makeText(                            this                            ,                                            "                            选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单                            "                            ,                Toast.LENGTH_LONG).show();                                    //                             如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用                                                                                            return                                                         true                            ;    }}                        

5.效果浏览

  

  三、自定义样式

  

1.gridview_menu.xml
                                                    <?                            xml version                            =                            "                            1.0                            "                             encoding                            =                            "                            utf-8                            "                            ?>                                                        <                            LinearLayout xmlns:android                            =                            "                            http://schemas.android.com/apk/res/android                            "                                android:orientation                            =                            "                            vertical                            "                                android:layout_width                            =                            "                            fill_parent                            "                                android:layout_height                            =                            "                            fill_parent                            "                                                            >                                                        <                            GridView         android:id                            =                            "                            @+id/gridview                            "                                     android:layout_width                            =                            "                            fill_parent                            "                                     android:layout_height                            =                            "                            fill_parent                            "                                     android:numColumns                            =                            "                            4                            "                                     android:verticalSpacing                            =                            "                            10dip                            "                                     android:horizontalSpacing                            =                            "                            10dip                            "                                     android:stretchMode                            =                            "                            columnWidth                            "                                     android:gravity                            =                            "                            center                            "                                                                 />                                                                                      LinearLayout                            >                        

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

  

2.item_menu.xml
                                                    <?                            xml version                            =                            "                            1.0                            "                             encoding                            =                            "                            utf-8                            "                            ?>                                                        <                            RelativeLayout xmlns:android                            =                            "                            http://schemas.android.com/apk/res/android                            "                                android:id                            =                            "                            @+id/RelativeLayout_Item                            "                                android:layout_width                            =                            "                            fill_parent                            "                             android:layout_height                            =                            "                            wrap_content                            "                                android:paddingBottom                            =                            "                            5dip                            "                            >                                                            <                            ImageView android:id                            =                            "                            @+id/item_image                            "                                    android:layout_centerHorizontal                            =                            "                            true                            "                             android:layout_width                            =                            "                            wrap_content                            "                                    android:layout_height                            =                            "                            wrap_content                            "                            >                            ImageView                            >                                                            <                            TextView android:layout_below                            =                            "                            @id/item_image                            "                             android:id                            =                            "                            @+id/item_text                            "                                    android:layout_centerHorizontal                            =                            "                            true                            "                             android:layout_width                            =                            "                            wrap_content                            "                                    android:layout_height                            =                            "                            wrap_content                            "                             android:text                            =                            "                            选项                            "                            >                            TextView                            >                                                                                    RelativeLayout                            >                        

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

  3.定义

  

代码
                                                    private                             boolean isMore                             =                                                         false                            ;                            //                             menu菜单翻页控制                                                            AlertDialog menuDialog;                            //                             menu菜单Dialog                                                            GridView menuGrid;    View menuView;                                    private                             final                             int                             ITEM_SEARCH                             =                                                         0                            ;                            //                             搜索                                                                                        private                             final                             int                             ITEM_FILE_MANAGER                             =                                                         1                            ;                            //                             文件管理                                                                                        private                             final                             int                             ITEM_DOWN_MANAGER                             =                                                         2                            ;                            //                             下载管理                                                                                        private                             final                             int                             ITEM_FULLSCREEN                             =                                                         3                            ;                            //                             全屏                                                                                        private                             final                             int                             ITEM_MORE                             =                                                         11                            ;                            //                             菜单                                                                                            /*                            * 菜单图片 *                            */                                                            int                            [] menu_image_array                             =                             { R.drawable.menu_search,            R.drawable.menu_filemanager, R.drawable.menu_downmanager,            R.drawable.menu_fullscreen, R.drawable.menu_inputurl,            R.drawable.menu_bookmark, R.drawable.menu_bookmark_sync_import,            R.drawable.menu_sharepage, R.drawable.menu_quit,            R.drawable.menu_nightmode, R.drawable.menu_refresh,            R.drawable.menu_more };                                /*                            * 菜单文字 *                            */                                String[] menu_name_array                             =                             {                             "                            搜索                            "                            ,                             "                            文件管理                            "                            ,                             "                            下载管理                            "                            ,                             "                            全屏                            "                            ,                             "                            网址                            "                            ,                             "                            书签                            "                            ,                                        "                            加入书签                            "                            ,                             "                            分享页面                            "                            ,                             "                            退出                            "                            ,                             "                            夜间模式                            "                            ,                             "                            刷新                            "                            ,                             "                            更多                            "                             };                                /*                            * 菜单图片2 *                            */                                                            int                            [] menu_image_array2                             =                             { R.drawable.menu_auto_landscape,            R.drawable.menu_penselectmodel, R.drawable.menu_page_attr,            R.drawable.menu_novel_mode, R.drawable.menu_page_updown,            R.drawable.menu_checkupdate, R.drawable.menu_checknet,            R.drawable.menu_refreshtimer, R.drawable.menu_syssettings,            R.drawable.menu_help, R.drawable.menu_about, R.drawable.menu_return };                                /*                            * 菜单文字2 *                            */                                String[] menu_name_array2                             =                             {                             "                            自动横屏                            "                            ,                             "                            笔选模式                            "                            ,                             "                            阅读模式                            "                            ,                             "                            浏览模式                            "                            ,                             "                            快捷翻页                            "                            ,                                        "                            检查更新                            "                            ,                             "                            检查网络                            "                            ,                             "                            定时刷新                            "                            ,                             "                            设置                            "                            ,                             "                            帮助                            "                            ,                             "                            关于                            "                            ,                             "                            返回                            "                             };                        
4.public boolean onMenuOpened(int featureId, Menu menu)
                                                    @Override                                public                             boolean onMenuOpened(                            int                             featureId, Menu menu) {                                    if                             (menuDialog                             ==                                                         null                            ) {            menuDialog                             =                                                         new                             AlertDialog.Builder(                            this                            ).setView(menuView).show();        }                             else                             {            menuDialog.show();        }                                    return                                                         false                            ;                            //                             返回为true 则显示系统menu                                                            }                        

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

  

5.private SimpleAdapter getMenuAdapter(String[] menuNameArray,
                                                    private                             SimpleAdapter getMenuAdapter(String[] menuNameArray,                                        int                            [] imageResourceArray) {        ArrayList                            <                            HashMap                            <                            String, Object                            >>                             data                             =                                                         new                             ArrayList                            <                            HashMap                            <                            String, Object                            >>                            ();                                    for                             (                            int                             i                             =                                                         0                            ; i                             <                             menuNameArray.length; i                            ++                            ) {            HashMap                            <                            String, Object                            >                             map                             =                                                         new                             HashMap                            <                            String, Object                            >                            ();            map.put(                            "                            itemImage                            "                            , imageResourceArray[i]);            map.put(                            "                            itemText                            "                            , menuNameArray[i]);            data.add(map);        }        SimpleAdapter simperAdapter                             =                                                         new                             SimpleAdapter(                            this                            , data,                R.layout.item_menu,                             new                             String[] {                             "                            itemImage                            "                            ,                             "                            itemText                            "                             },                                            new                                                         int                            [] { R.id.item_image, R.id.item_text });                                    return                             simperAdapter;    }                        

为菜单添加菜单项。

6.public boolean onCreateOptionsMenu(Menu menu)
                                                    @Override                                public                             boolean onCreateOptionsMenu(Menu menu) {        menu.add(                            "                            menu                            "                            );                            //                             必须创建一项                                                                                            return                             super.onCreateOptionsMenu(menu);    }                        
7.protected void onCreate(Bundle savedInstanceState)
                                                    @Override                                protected                                                         void                             onCreate(Bundle savedInstanceState) {                                    //                             TODO Auto-generated method stub                                                                super.onCreate(savedInstanceState);                setContentView(R.layout.main);                menuView                             =                             View.inflate(                            this                            , R.layout.gridview_menu,                             null                            );                                    //                             创建AlertDialog                                                                menuDialog                             =                                                         new                             AlertDialog.Builder(                            this                            ).create();        menuDialog.setView(menuView);        menuDialog.setOnKeyListener(                            new                             OnKeyListener() {                                        public                             boolean onKey(DialogInterface dialog,                             int                             keyCode,                    KeyEvent                             event                            ) {                                            if                             (keyCode                             ==                             KeyEvent.KEYCODE_MENU)                            //                             监听按键                                                                            dialog.dismiss();                                            return                                                         false                            ;            }        });        menuGrid                             =                             (GridView) menuView.findViewById(R.id.gridview);        menuGrid.setAdapter(getMenuAdapter(menu_name_array, menu_image_array));                                    /*                            * 监听menu选项 *                            */                                    menuGrid.setOnItemClickListener(                            new                             OnItemClickListener() {                                        public                                                         void                             onItemClick(AdapterView                            <?>                             arg0, View arg1,                             int                             arg2,                                                long                             arg3) {                                            switch                             (arg2) {                                            case                             ITEM_SEARCH:                            //                             搜索                                                                                                        break                            ;                                            case                             ITEM_FILE_MANAGER:                            //                             文件管理                                                                                                        break                            ;                                            case                             ITEM_DOWN_MANAGER:                            //                             下载管理                                                                                                        break                            ;                                            case                             ITEM_FULLSCREEN:                            //                             全屏                                                                                                        break                            ;                                            case                             ITEM_MORE:                            //                             翻页                                                                                                        if                             (isMore) {                        menuGrid.setAdapter(getMenuAdapter(menu_name_array2,                                menu_image_array2));                        isMore                             =                                                         false                            ;                    }                             else                             {                            //                             首页                                                                                menuGrid.setAdapter(getMenuAdapter(menu_name_array,                                menu_image_array));                        isMore                             =                                                         true                            ;                    }                    menuGrid.invalidate();                            //                             更新menu                                                                            menuGrid.setSelection(ITEM_MORE);                                                break                            ;                }                                            }        });    }                        
完整代码
                                                    package com.wjq.menu;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.DialogInterface.OnKeyListener;import android.os.Bundle;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.GridView;import android.widget.SimpleAdapter;import android.widget.AdapterView.OnItemClickListener;                            public                                                         class                             CustomizeMenu extends Activity {                                    private                             boolean isMore                             =                                                         false                            ;                            //                             menu菜单翻页控制                                                            AlertDialog menuDialog;                            //                             menu菜单Dialog                                                            GridView menuGrid;    View menuView;                                    private                             final                             int                             ITEM_SEARCH                             =                                                         0                            ;                            //                             搜索                                                                                        private                             final                             int                             ITEM_FILE_MANAGER                             =                                                         1                            ;                            //                             文件管理                                                                                        private                             final                             int                             ITEM_DOWN_MANAGER                             =                                                         2                            ;                            //                             下载管理                                                                                        private                             final                             int                             ITEM_FULLSCREEN                             =                                                         3                                                
  • Android学习点点滴滴之获取系统可用内存
    2011-04-29 12:08 696 Android学习点点滴滴之获取系统可用内存   ...
  • Android学习点点滴滴之获取正在运行的进程
    2011-04-29 12:07 845 Android学习点点滴滴之获取正在运行的进程 ...
  • Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)
    2011-04-29 12:07 818 Android 应用程序窗体显示状态操作(requestWi ...
  • Android游戏开发教程汇总
    2011-04-29 12:06 835 Android游戏开发教程汇总   把最近搜集到 ...
  • Android 对话框(Dialog)大全 建立你自己的对话框
    2011-04-29 12:06 635 Android 对话框(Dialog)大全 建立你自己的对话框 ...
  • Android资源总结(开发工具/环境搭建/教程/论坛/博客/反编译工具)
    2011-04-29 12:05 655 Android资源总结(开发工具/环境搭建/教程/论坛/博客 ...
  • android Toast大全(五种情形)建立属于你自己的Toast
    2011-04-29 12:04 579 android Toast大全(五种情形)建立属于你自己的T ...
  • 通过创建一个位图的XY Chart来学习Android绘图类Rect,Paint,Bitmap,Canvas(附源码)
    2011-04-29 12:03 1502 通过创建一个位图的XY Chart来学习Android绘图类 ...
  • Android2.3操作系统即将发布,亮点解读
    2011-04-29 12:02 685 Android2.3操作系统即将发布,亮点解读 ...
  • Android之Bundle传递数据详解与实例及Bundle与SharedPreferences的区别
    2011-04-29 12:02 940 Android之Bundle传递数据详解与实例及Bundle ...
  • Android开源项目源码下载(不断更新中)
    2011-04-29 12:01 5405 Android开源项目源码下� ...
  • android控件之VideoView建立自己的播放器
    2011-04-29 12:01 911 android控件之VideoView建立自己的播放器 ...
  • Android控件之ZoomButton缩放按钮
    2011-04-29 12:00 714 Android控件之ZoomButton缩放按钮 ...
  • Android控件之ZoomControls缩放控件
    2011-04-29 12:00 1009 Android控件之ZoomControls缩放控件 ...
  • Android简单数据存储类SharedPreferences详解及实例(通过“记住密码”功能学习SharedPreferences)
    2011-04-29 11:58 909 Android简单数据存储类SharedPreference ...
  • Android布局控件之LinearLayout详解
    2011-04-29 11:58 1049 Android布局控件之LinearLa ...
  • Android控件之SlidingDrawer(滑动式抽屉)详解与实例
    2011-04-29 11:56 1022 Android控件之SlidingDrawer� ...
  • 转Android系统架构
    2011-04-29 11:55 645 转Android系统架构  Android的系统 ...
  • Android学习资料分享(不断更新中)
    2011-04-29 11:54 1098 Android学习资料分享(不断更新中)  最近 ...
  • Android权限说明
    2011-04-29 11:53 586 Android权限说明 程序执行需要读取到安全敏 ...
Global site tag (gtag.js) - Google Analytics

更多相关文章

  1. android:contentDescription 的用途
  2. Android(安卓)开发学习小结(七)
  3. Android设置安装后无界面,只有service在后台显示
  4. Android布局--相对布局,RTL,用代码实现布局
  5. 修改android statusbar颜色
  6. Android底部菜单栏 仿微博效果
  7. Welcome, Android(安卓)Q(刷机有风险,操作需谨慎)
  8. Relativelayout
  9. android GridView item中组件获取焦点

随机推荐

  1. android开发框架汇总
  2. android 环境待建遇到的问题
  3. 高仿360手机卫士——Android源码
  4. Android 7.1使用以太网口共享本机4G网络
  5. android 多国语言
  6. Android中关于键盘管理,点击除editText外
  7. Android.API.Context.getFilesDir()
  8. Android组件TextView细节
  9. android设置字符串到剪贴板
  10. android Git配置,及分支管理,忽略文件