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);
}

最新文章

  1. jQuery的案例及必知重要的jQuery选择器
  2. sql 脚本编写之路 常用语句(一)
  3. Unity_Shader(1)
  4. Cloudera Manager 5和CDH5离线安装
  5. sqlzoo.net刷题4
  6. matlab练习程序(最小包围矩形)
  7. Interface Serializable
  8. UVa 202 - Repeating Decimals
  9. Entity Framework 之 Code First
  10. 【2017-05-18】WebForm的Repeater控件和一些简单控件
  11. [1] MVC & MVP &MVVM
  12. windows 下面make的使用示例
  13. Redis主从同步原理-PSYNC【转】
  14. 17.解释器模式(Interpreter Pattern)
  15. springboot11-security02FromDB 权限管理(用户信息和角色信息保存在数据库)
  16. scrapy-redis的使用与解析
  17. python -- 解决If using all scalar values, you must pass an index问题
  18. innodb count优化测试
  19. 单元测试工具Nunit
  20. Cocos2d-html5帧动画

热门文章

  1. mirror.js 整合redux的好工具
  2. 前端之CSS常见兼容性问题
  3. 解决 Cocos2d-x 3.2 error C1041: 无法打开程序数据库vc120.pdb
  4. XML文件的解析和序列化
  5. NBUT 1117 Kotiya's Incantation(字符输入处理)
  6. 找出指定文件夹中的所有以txt结尾的文件,包括所有嵌套的子文件夹
  7. Codeforces C The Game of Efil (暴力枚举状态)
  8. CAD命令标志
  9. 激活 IDEA, PyCharm
  10. python爬虫---实现项目(三) Selenium分析美团美食