Android的onCreateOptionsMenu()创建菜单Menu详解

来源:互联网 发布:猎豹高清网络电视apk 编辑:程序博客网 时间:2024/06/13 02:52

android一共有三种形式的菜单:
            1.选项菜单(optinosMenu)
            2.上下文菜单(ContextMenu)
            3.子菜单(subMenu)
其中最常用的就是选项菜单(optionsMenu), 该菜单在点击 menu 按键 后会在对应的Activity底部显示出来。
1.Activity菜单机制  (与dialog类似)
Activity有一套机制来实现对菜单的管理,方法如下:
public class MainActivity extends Activity {  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);  }  @Override  public boolean onCreateOptionsMenu(Menu menu) {    /**     * 此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例。 返回true则显示该menu,false 则不显示;     * (只会在第一次初始化菜单时调用) Inflate the menu; this adds items to the action bar     * if it is present.     */    getMenuInflater().inflate(R.menu.main, menu);    return true;  }  @Override  public boolean onPrepareOptionsMenu(Menu menu) {    /**     * 在onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单显示前被调用。 同样的,     * 返回true则显示该menu,false 则不显示; (可以通过此方法动态的改变菜单的状态,比如加载不同的菜单等) TODO     * Auto-generated method stub     */    return super.onPrepareOptionsMenu(menu);  }  @Override  public void onOptionsMenuClosed(Menu menu) {    /**     * 每次菜单被关闭时调用. (菜单被关闭有三种情形,menu按钮被再次点击、back按钮被点击或者用户选择了某一个菜单项) TODO     * Auto-generated method stub     */    super.onOptionsMenuClosed(menu);  }  @Override  public boolean onOptionsItemSelected(MenuItem item) {    /**     * 菜单项被点击时调用,也就是菜单项的监听方法。      * 通过这几个方法,可以得知,对于Activity,同一时间只能显示和监听一个Menu 对象。 TODO Auto-generated     * method stub     */    return super.onOptionsItemSelected(item);  }}

 

2. 添加菜单:
      可以在onCreateOptionsMenu或者 onPrepareOptionsMenu方法中来添加菜单

      2.1代码添加:
        menu.add((int groupId, int itemId, int order, charsequence title) .setIcon(drawable ID)

       add()方法的四个参数,依次是: 

      1、组别,如果不分组的话就写Menu.NONE, 

      2、Id,这个很重要,Android根据这个Id来确定不同的菜单 

      3、顺序,哪个菜单项在前面由这个参数的大小决定 

      4、文本,菜单项的显示文本

       add()方法返回的是MenuItem对象,调用其setIcon()方法,为相应MenuItem设置Icon
     示例:
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(Menu.NONE, Menu.First+1 , 0, "设置").setIcon(R.drawable.setting);
        return true;
    }
      
      2.2布局文件添加:
         
       getMenuInflater().inflate(R.menu.options_menu, menu);
      调用Activity的getMenuInflater()得到一个MenuInflater, 
       使用inflate方法来把布局文件中的定义的菜单 加载给 第二个参数所对应的menu对象
       示例:
     @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.options_menu , menu);
        return true;
    }
    布局文件:
      在res目录下建立一个menu文件夹,并创建布局文件: options_menu.xml 
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_setting " android:title="设置" android:icon="@drawable/setting"></item>
    </menu>
   3.菜单项监听:
    只要菜单中的菜单项被点击,都会触发onOptionsItemSelected(MenuItem item)
    item参数即为被点击的菜单项,那么需要在此方法内判断哪个Item被点击了,从而实现不同的操作。
    对于两种不同的添加菜单方法,判断的方法有一点区别,但本质是一样的。
    3.1代码添加菜单的判断方法
     @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch(item.getItemId())//得到被点击的item的itemId
        {
        case Menu.First+1 : //对应的ID就是在add方法中所设定的Id
            break;
        case Menu.First+2 :
            break;
        }
        return true;
    }
  3.2布局文件添加菜单的判断方法:
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch(item.getItemId())//得到被点击的item的itemId
        {
        case R.id.menu_setting ://这里的Id就是布局文件中定义的Id,在用R.id.XXX的方法获取出来
            break;
        case R.id.menu_info:
            break;
        }
        return true;
    }

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃鸡耳机有杂音怎么办 分期付款车被朋友卖了怎么办 网上购物付款显示繁忙怎么办 同行招牌高于我的招牌怎么办 拼多多刷手退款怎么办 网银卡在手机上卸载了怎么办 企业网银密码忘了怎么办 网银钱转错了怎么办 民生百货购物卡过期了怎么办 新办卡注册过支付宝账号怎么办 床上用品专卖店没人进店怎么办 红蚂蚁咬了红肿痒怎么办 碎纸机轮不转了怎么办 轮滑鞋刀架螺丝圆了了怎么办 万朋商城2018年怎么办 超市盘点少了烟怎么办 歌华有线电视费用欠费好久怎么办 租房到期房东不退押金怎么办 个税申报错税局查出来怎么办 苹果手表抬腕唤醒失灵怎么办 在京东充电费充错了怎么办 进去了微商传销怎么办 喝完酒四肢酸痛睡不着怎么办 喝多了全身痛怎么办 喝完酒第二天浑身酸痛怎么办 鑫和陌车骗我钱怎么办 社会人加你qq怎么办 有人问你加qq怎么办 住酒店遇到被色情诈骗怎么办 怎么办我陷入感情骗局了 移动手机卡被强制停机怎么办 诚e赊套现被骗了怎么办 钻戒小了怎么办小窍门 爱用商城逾期了怎么办 工程骗局洗脑了怎么办 还网贷客服电话打不通怎么办 中信客服电话打不通怎么办 亚马逊客服电话打不通怎么办 安卓软件闪退怎么办? 吃鸡麦克风炸麦怎么办 美版iphone屏摔了怎么办