1、Android的Menu简介

Android系统的Menu主要有三种:OptionsMenu、ContextMenu、SubMenu

自定义Menu可参考:http://www.cnblogs.com/salam/archive/2011/04/04/2005329.html

2、OptionsMenu用法

2.1、创建Menu

按下Menu键时,屏幕底部就会弹出menu选项,提供选择。创建OptionsMenu的方法是在Activity类中复写onCreateOptionsMenu(),然后通过menu.add()方法添加各种选项,add方法的详细参数和返回值如下 :

public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title) 

groupId,组别,用来划分itemid的。一般为Menu.NONE

itemId,ID。是menu识别编号,供识别menu用的,很重要

order,顺序。这个参数的大小决定菜单选项出现的先后顺序。顺序按照参数由小到大

title,显示文本

返回值为turn时,menu才有效,若是 return false;则menu不能显示,也就是说menu无效。
复写方法onCreateOptionsMenu()时,就有个 return super.onCreateOptionsMenu(menu);,默认就行了。
添加menu选项例子:

menu.add(Menu.NONE,0,0,"添加").setIcon(android.R.drawable.ic_menu_add);

2.2、处理Menu
通过复写onOptionsItemSelected()方法即可,然后通过item.getItemId(),筛选不同的itemid,然后执行相应的方法

switch (item.getItemId()) {case 0:Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();break;default:Toast.makeText(this, "方法还没定义", Toast.LENGTH_SHORT).show();break;}return super.onOptionsItemSelected(item);

2.3、其他方法
onPrepareOptionsMenu()方法简述
点击menu按钮时,menu显示出来前,通过复写这个方法可以定义处理事件。

onOptionsMenuClosed()简述
退出menu之后,通过复写这个方法可以定义处理事件。menu按钮再被点击,back按钮被点击,或者用户选择了menu其中的一个选项,menu都会退出。

3、SubMenu用法

SubMenu实现的是子菜单功能,如“添加”的下一级菜单为“从网络添加”和“从本地添加两个选项的Menu”

SubMenu submenu=menu.addSubMenu(Menu.NONE, 0, 0, "添加").setIcon(android.R.drawable.ic_menu_add);submenu.add(Menu.NONE, 10, 0, "从网络添加");submenu.add(Menu.NONE, 11, 1, "从本地添加");

submenu.add()方法不能设置图标,设置了也是无效的;但是submenu本身可以设置图标,submenu.setIcon();

4、ContextMenu用法

长按某个View达2秒后,就弹出menu。创建的方法是复写onCreateContextMenu()方法,处理方法是onContextItemSelected()。因为是长按某一个View,所以ContextMenu要注册到目标view,才能实现。

注册方法如下(如,注册到一个EditText,长按这个EditText就可以调出Menu了),et是EditText的id

this.registerForContextMenu(findViewById(R.id.et));

onCreateContextMenu里面的add()/setIcon()方法不能添加图标,就算添加了,也不能显示出来的。在onCreateContextMenu方法里面也能设置submenu子菜单,方法参考第3点

public class MenuActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);this.registerForContextMenu(findViewById(R.id.et));//注册到EditText,et是它的id}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {// TODO Auto-generated method stubmenu.add(Menu.NONE, 0, 0, "添加");menu.add(Menu.NONE, 1, 1, "保存");super.onCreateContextMenu(menu, v, menuInfo);}@Overridepublic boolean onContextItemSelected(MenuItem item) {// TODO Auto-generated method stubswitch (item.getItemId()) {case 0:Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();break;case 1:Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();break;default:Toast.makeText(this, "方法还没定义", Toast.LENGTH_SHORT).show();break;}return super.onContextItemSelected(item);}}

5、自定义菜单

自定义菜单参考自:http://www.cnblogs.com/salam/archive/2011/04/04/2005329.html

完整代码如下:

<!-- 用于定义自定义Menu的布局 --><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <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>

<!-- 用于定义Menu单个按钮的样式 --><?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:contentDescription="@string/autoMenuIcon"        android:id="@+id/item_image"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true" >    </ImageView>    <TextView        android:id="@+id/item_text"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/item_image"        android:layout_centerHorizontal="true"        android:text="@string/menuText" >    </TextView></RelativeLayout>

public class AndroidMenuActivity extends Activity {    /** Called when the activity is first created. */private boolean isMore = false;// menu菜单翻页控制View menuView;GridView menuGrid;AlertDialog menuDialog;// menu菜单Dialog    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 = {     "自动横屏",     "笔选模式",     "阅读模式",     "浏览模式",     "快捷翻页",            "检查更新",             "检查网络",             "定时刷新",             "设置",             "帮助",             "关于",             "返回"            };    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        //通过grid_view_menu.xml        menuView = View.inflate(this, R.layout.grid_view_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) {// TODO Auto-generated method stub                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;                }            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {    // TODO Auto-generated method stub    menu.add("menu");// 必须创建一项    return super.onCreateOptionsMenu(menu);    }    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;    }    @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    }}

更多相关文章

  1. android投屏和媒体共享相关 && audio focus机制相关 && AudioTra
  2. Android第三方登录-----微信登录接入方法
  3. android 判断是否由adb调试进入页面 或直接跳转到开发者选项页面
  4. Android 菜单详解
  5. Android SDK Manager 更新方法
  6. android各种菜单使用介绍
  7. android 实现时钟的简单方法
  8. android的Menu使用(1)------选项菜单

随机推荐

  1. 静态类
  2. Elasticsearch索引和文档操作实例教程
  3. 分享终端控制传感器或设备,形成回路控制实
  4. 直接调用vs反射调用实例教程
  5. 操作 ASP.NET Web API 的实例教程
  6. UWP中使用Composition API实现吸顶的介绍
  7. WPF MaterialDesign 示例开源项目介绍
  8. C#中算法的实例详解
  9. C# 并行任务之Parallel类的实例介绍
  10. 关于操作 ASP.NET Web API的实例