android的菜单主要分三类:选项菜单(Options Menu)、上下文菜单(Context Menu)、子菜单(Submenu)。

1 选项菜单和子菜单

一个Menu对象代表一个菜单,Menu中可添加菜单项MenuItem,也可以添加子菜单SubMenu。

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

@Override
   public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        //添加性别子菜单
        SubMenu subMenuGender=menu.addSubMenu(MAIN_GROUP, MENU_GENDER, 0,"性别");
        subMenuGender.setIcon(R.drawable.gender);
        subMenuGender.setHeaderIcon(R.drawable.gender);
        male=subMenuGender.add(GENDER_GROUP,MENU_GENDER_MALE, 0, "男");//为子菜单添加选项
        male.setChecked(true);//设置默认选项
        subMenuGender.add(GENDER_GROUP,MENU_GENDER_FEMALE, 0, "女");//为子菜单添加选项
        subMenuGender.setGroupCheckable(GENDER_GROUP, true, true);//设置GENDER_GROUP组是可选的、互斥的
        
        //添加兴趣子菜单
       SubMenu subMenuHobby=menu.addSubMenu(MAIN_GROUP, MENU_HOBBY, 1, "爱好");
        subMenuHobby.setIcon(R.drawable.hobby);
        miaHobby[0]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY1, 0, "游泳");
        miaHobby[1]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY2, 1, "篮球");
        miaHobby[2]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY3, 2, "跑步");
        miaHobby[0].setCheckable(true);
        miaHobby[1].setCheckable(true);
        miaHobby[2].setCheckable(true);//设置为可多选
        
        MenuItem ok=menu.add(MAIN_GROUP, MENU_OK, 3, "确定");//为主菜单添加选项菜单
        OnMenuItemClickListener lsn=new OnMenuItemClickListener() {
            
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                // TODO Auto-generated method stub
                appendStateStr();
                return true;
            }
        };
        ok.setOnMenuItemClickListener(lsn);
        ok.setAlphabeticShortcut('o');
//给确定菜单设置字符快捷键
        return true;
    }

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch(item.getItemId()){
        case MENU_GENDER_MALE:
        case MENU_GENDER_FEMALE:
            item.setChecked(true);
            appendStateStr();
            break;
        case MENU_HOBBY1:
        case MENU_HOBBY2:
        case MENU_HOBBY3:
            item.setChecked(!item.isChecked());
            appendStateStr();
            break;
        }
        return true;
    }

private void appendStateStr() {
        // TODO Auto-generated method stub
        String result="您选择的性别是:";
        if(male.isChecked()){
            result+="男";
        }else{
            result+="女";
        }
        String hobbyStr="";
        for(MenuItem mi:miaHobby){
            if(mi.isChecked()){
                hobbyStr+=mi.getTitle()+"、";
            }
        }
        if(hobbyStr.length()>0){
            result+=",您的爱好为:"+hobbyStr.substring(0,hobbyStr.length()-1)+".\n";
        }else{
            result=result+".\n";
        }
        Toast.makeText(mainActivity.this, result, Toast.LENGTH_LONG).show();
    }

2 上下文菜单

上下文菜单是注册到某个View对象上的,如果一个View对象注册了上下文菜单,用户可通过长按该View对象弹出上下文菜单.

首先在onCreateContextMenu中为不同空间配置不同的上下文菜单:

@Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderIcon(R.drawable.bird);
        if(v==findViewById(R.id.editview01)){
            menu.add(0,1,0,"菜单项1");
            menu.add(0,2,0,"菜单项2");
            menu.add(0,3,0,"菜单项3");
        }else if(v==findViewById(R.id.editview02)){
            menu.add(0,4,0,"菜单项4");
            menu.add(0,5,0,"菜单项5");
        }
    }

在onCreate方法中为两个文本框注册上下文菜单:

@Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       this.registerForContextMenu(findViewById(R.id.editview01));
       this.registerForContextMenu(findViewById(R.id.editview02));
       
   }

添加上下文菜单监听事件:

@Override
public boolean onContextItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch(item.getItemId()){
    case 1:
    case 2:
    case 3:
        Toast.makeText(mainActivity.this, "这是第一个EditView的上下文菜单"+item.getTitle(), Toast.LENGTH_LONG).show();
    case 4:
    case 5:
        Toast.makeText(mainActivity.this, "这是第二个EditView的上下文菜单"+item.getTitle(), Toast.LENGTH_LONG).show();
            
    }
    return super.onContextItemSelected(item);
}

android 之 菜单的更多相关文章

  1. Android侧滑菜单代码实现

    前两天学习了hyman老师讲的Android侧滑菜单的实现,经过自己的整理分享出来给大家学习一下 现在很多APP都有菜单侧滑的功能,本篇文章主要讲解使用自定义的HorizontalScrollView ...

  2. android 三级菜单 BaseExpandableListAdapter

    在网上搜了非常长时间.没有找到合适的Android三级菜单.所以就自己动手写了一个,主要使用了BaseExpandableList来实现,通过三个布局文件来完毕相应的菜单项,详细实现请參照下图. wa ...

  3. Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744400 之前我向大家介绍了史上最简单的滑动菜单的实现方式,相信大家都还记得.如 ...

  4. 【转】Android 系统菜单与自定义菜单

    Android 系统菜单与自定义菜单实现方法如下:系统菜单显示DefaultMenu.java package com.wxz.menu; import com.wxz.menu.R; import  ...

  5. BottomBar之Android底部菜单

    BottomBar之Android底部菜单 前言:开源项目BottomBar,实现Android底部菜单(常用菜单,BottomBar实现动画(上下式)+消息菜单,BottomBar+ViewPage ...

  6. Android之菜单总结

    在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 1. 选项菜单(OptionsMenu)详解 Activi ...

  7. Android底部菜单的实现

    前言:以前制作菜单使用TabHost,但是android 3.0以上就被废弃了,google已经不建议使这个类了.ActionBar也是菜单,不过在头部,算是导航了 ===本文就介绍怎么制作底部菜单= ...

  8. android上下文菜单

    XML: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmln ...

  9. Android Menu菜单使用

    如上图右上角,菜单选项的编辑,第一种代码实现方式如下: package com.example.menu; import android.os.Bundle; import android.app.A ...

随机推荐

  1. nodejs express 设置html后缀模板

    express 框架的默认渲染模板的后缀是 ejs ,由于编译器在ejs的文件里写html代码没有高亮显示,所以使用html模板. 示例: var app = express(); app.set(' ...

  2. ASP.Net MVC 控制@Html.DisplayFor日期显示格式

    在做一個舊表的查詢頁時,遇到一個問題: 字段在db里存儲的是DATETIME,但保存的值只有日期,沒有時間數據,比如2018/2/26 0:00:00,顯示出來比較難看, 當然也可以做一個ViewMo ...

  3. Java MVC 增删改查 实例

    需求:实现增加新部门的功能,对应数据库表示Oracle的dept表 一.Java MVC 增 实现: 1.视图层(V):注册部门 deptAdd.jsp 在注册新部门页面只需输入“部门名称”和“城市” ...

  4. github入门之基本操作--4

    1.初始化仓库 如果成功执行git init 命令,该目录下会生成一个.git的目录 2.查看仓库状态 *注: 实际工作中,git status使用次数非常多,一定要记住.因为当工作树和仓库被操作的过 ...

  5. github入门之创建仓库--3

    1.登陆到github,点击加号中的New repository 2.设置仓库信息 *注: ------Description:添加仓库说明,不是必填项 ------Public.Private:选择 ...

  6. Xmind几个有用的技巧

    Xmind是一个很好的思维导图工具,是学习研究总结的好帮手. Xmind功能很丰富,这里只是简要列出几个比较有用的技巧. 1.善用属性 选中一个xmind元素(专业名词叫[主题])后,一般在右下角会出 ...

  7. 51nod 1174 区间中最大的数(送盾题)

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少. ...

  8. htmlunit抓取js执行后的网页源码

    上次我不是写了一个自动抓取博客访问量吗 (点击打开链接) 可是昨天晚上我又运行的时候,发现不能用了.. 运行了几次 发现使用URLConnection 得到的网页源码和浏览器直接查看的不同. URLC ...

  9. mybatis 原理研究

    1. mybatis 是使用JDBC来实现的, 所以需要我们首先了解JDBC 的查询 ①加载JDBC驱动 ②建立并获取数据库连接 ③设置sql语句的传递参数 ④执行sql语句并获得结果 ⑤对结果进行转 ...

  10. js 判断是什么浏览器、是否为谷歌浏览器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...