选项菜单,上下文菜单,弹出菜单概括

属性 :

title :设置菜单的文本

icon :设置菜单的背景

id :设置菜单的id

showAsAction :设置菜单的显示情况

always : 使菜单显示到工作台

withtext :控制图标和文本共同显示

IfRoom :如果有空间就显示

使菜单运行到虚拟机上

//    创建选项菜单
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
//        加载菜单资源
        getMenuInflater().inflate(R.menu.option,menu);
        return true;
    }

 与id一同搭配使用来控制各个菜单的功能

 public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.save:
                Toast.makeText(MyActivity.this,"保存",Toast.LENGTH_SHORT).show();
                break;
            case R.id.setting:
                Toast.makeText(MyActivity.this,"设置",Toast.LENGTH_SHORT).show();
                break;
            case R.id.exit:
               finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }

上下文菜单 : 通过长按进行使用

为按钮设置上下文操作模式
//        ①实现ActionMode callback
//        ②在view的长按事件中去启动上下文操作模式
 ActionMode.Callback ac=new ActionMode.Callback() {
        @Override
//        创建,在启动上下文操作模式(startActionMode(Callback))时调用
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
            getMenuInflater().inflate(R.menu.context, menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
            return true;
        }

        //          在创建方法后开始调用
        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
            switch (menuItem.getItemId()) {
                case R.id.delete:
                    Toast.makeText(MyActivity.this, "删除", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.operate1:
                    Toast.makeText(MyActivity.this, "操作一", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.operate2:
                    Toast.makeText(MyActivity.this, "操作二", Toast.LENGTH_SHORT).show();
                    break;
            }
            return true;
        }

        //          上下文操作模式结束时被调用
        @Override
        public void onDestroyActionMode(ActionMode actionMode) {

        }
    };
 findViewById(R.id.ctx_btn).setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                startActionMode(ac);
                return false;
            }
        });

弹出菜单 : 一般出现在被绑定的view的下方

 final     Button pb=findViewById(R.id.pop_btn);
        pb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                ①实例化popmenu对象
                PopupMenu pm=new PopupMenu(MyActivity.this,pb);
//                ②加载菜单资源,利用Menulnfalter
                pm.getMenuInflater().inflate(R.menu.popup,pm.getMenu());
//                ③为popmenu设置监听器

                pm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem menuItem) {
                        switch (menuItem.getItemId()) {
                            case R.id.copy:
                                Toast.makeText(MyActivity.this, "复制", Toast.LENGTH_SHORT).show();
                                break;
                            case R.id.paste:
                                Toast.makeText(MyActivity.this, "粘贴", Toast.LENGTH_SHORT).show();
                                break;
                        }

                        return false;
                    }
                });

                pm.show();

            }
        });

 
 

 
 

猜你喜欢

转载自blog.csdn.net/m0_63911789/article/details/124517817