Menu:选项菜单,上下文菜单,弹出式菜单

本文详细介绍了Android应用中的三种菜单类型:OptionMenu、ContextMenu和PopupMenu。OptionMenu作为应用的主菜单,通过onCreateOptionsMenu加载资源并显示。ContextMenu在长按时弹出,提供上下文相关操作。PopupMenu则是一个模态弹出菜单,常用于绑定View并显示相关操作。文章通过示例代码展示了它们的创建和使用方法。
摘要由CSDN通过智能技术生成

Menu的分类

1.选项菜单(OptionMenu)

选项菜单是一个应用的主菜单项,用于放置对应用产生全局影响的操作。

操作栏中

菜单的建立

//创建OptionMenu
public boolean onCreateOptionsMenu(Menu menu){
    //加载菜单资源
    getMenuInflater().inflate(R.menu.option,menu);//两个参数(menu资源,菜单对象)
    //return super.onCreateOptionsMenu(menu);需要renturn true,否则菜单不会显示
    return true;
}

菜单的属性:

android:showAsAction="always"将本文显示在外面

android:icon="图片"该文本处显示图片,但是此时不显示文本

android:showAsAction="always|withText"//显示图片的同时显示文本

android:showAsAction="never"不会直接在菜单栏外显示

android:showAsAction="collapseActionView"一般和ifRoom一起用,表示折叠该选项,有空间的时候展示(折叠是指在菜单内)

option菜单选项的选中

 //optionMenu菜单项的选中方法
    public boolean onOptionsItemSelected(MenuItem item){
        switch(item.getItemId()){
            case R.id.save:
                Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();
                break;
            case R.id.setting:
                Toast.makeText(this, "设置", Toast.LENGTH_SHORT).show();
                break;
            case R.id.exit:
                Toast.makeText(this, "退出", Toast.LENGTH_SHORT).show();
                finish();
                break;
        }
        return true;
    }

2.上下文菜单(ContextMenu)

长按某个View不放,就会在屏幕中间弹出ContextMenu

//4.为按钮设置上下文操作模式
        //①实现ActionModeCallBack回调接口
        //在View的长按事件中去启动上下文操作模式
        findViewById(R.id.ctx_btn).setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                startActionMode(cb);
                return false;
            }
        });

    }

    ActionMode.Callback cb=new ActionMode.Callback(){
        //创建,在启动上下文操作模式时(startActionMode(Callback))时调用
        @Override
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
            Log.e("TAG","创建");
            //上下文资源菜单的配置
            getMenuInflater().inflate(R.menu.context,menu);
            return true;
        }
        //在创建方法后进行调用
        @Override
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
            Log.e("TAG","准备");
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
            Log.e("TAG","点击");
            switch(menuItem.getItemId()){
                case R.id.delte:
                    Toast.makeText(OptionmenuActivity.this, "删除", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.c1:
                    Toast.makeText(OptionmenuActivity.this, "操作一", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.c2:
                    Toast.makeText(OptionmenuActivity.this, "操作二", Toast.LENGTH_SHORT).show();
                    break;
            }
            return true;
        }
        //上下文操作模式结束时被调用
        @Override
        public void onDestroyActionMode(ActionMode actionMode) {
            Log.e("TAG","结束");
        }
    };

3.弹出菜单(PopupMenu)

 一个模态形式的弹出菜单,绑定在某个View上,一般出现在被绑定的View的xiaf。

点击某个控件时这个菜单就会出现在该控件的下方将菜单xml显示出来

//popup_but:演示PopupMenu
        Button popupButton=findViewById(R.id.popup_but);
        popupButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //①实例化PopupMenu对象(参数2:被绑定的View)
                PopupMenu menu=new PopupMenu(OptionmenuActivity.this,popupButton);
                //②加载菜单资源:利用MenuInflate将Menu资源加载到PopupMenu.getMenu()中
                //将R.menu.xx对于的菜单资源加载到弹出式菜单中
                menu.getMenuInflater().inflate(R.menu.popup,menu.getMenu());
                //③为PopupMenu设置点击监听事件
                menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem menuItem) {
                        switch(menuItem.getItemId()){
                            case R.id.copy:
                                Toast.makeText(OptionmenuActivity.this, "复制", Toast.LENGTH_SHORT).show();
                                break;
                            case R.id.paste:
                                Toast.makeText(OptionmenuActivity.this, "粘贴", Toast.LENGTH_SHORT).show();
                                break;
                        }
                        return true;
                    }
                });
                //④千万不要忘记这一步,显示PopupMenu
                menu.show();//显示
            }
        });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值