Android菜单的创建以及使用(详细介绍)

安卓3.0之前的菜单为
在这里插入图片描述
安卓3.0之后的菜单为
在这里插入图片描述
创建一个layout,便于演示
在这里插入图片描述

菜单的分类:
一:Optionmenu(选项菜单)
在这里插入图片描述
在这里插入图片描述
一般选项菜单只有两层,否则会影响用户体验
代码演示为:
1.在res目录下先创建一个资源文件夹
在这里插入图片描述
2.选择资源类型为menu即可
菜单的代码为:
一般情况下为拖拽添加
在这里插入图片描述

其中一个代码为
showAsAction属性值:always :直接在标题栏显示
never:不显示
withText:控制图标和文本一起显示
ifRoom:有空间就显示
有id的作用是为了在代码文件中便于操作
在这里插入图片描述

在这里插入图片描述

二:Contextmenu(上下文菜单)
长按一个view不放,就会弹出上下文菜单
个人感觉要分为两大块,两大块都能实现上下文菜单,第二大块使用较多用按钮ctx_btn:演示ContextMenu
第一块
让其在屏幕的中央显示
1.注册registerForContextMenu(findViewById(R.id.ctx_btn));
2.创建 覆盖onCreateContextMenu
3.菜单项的操作 覆盖onContextItemSelected
在这里插入图片描述
②第二块
将选项菜单放置在屏幕的上方启动
为按钮设置上下文操作模式
①实现ActionMode CallBack
②在view的长按事件中去启动上下文操作模式

	①
    ActionMode.Callback cb = new ActionMode.Callback() {
	//创建,在启动上下文操作模式(startActionMode(callback))时间调用
    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.delete:
                Toast.makeText(MainActivity.this,"删除",Toast.LENGTH_SHORT).show();
                break;
            case R.id.opera1:
                Toast.makeText(MainActivity.this,"操作1",Toast.LENGTH_SHORT).show();
                break;
            case R.id.opera2:
                Toast.makeText(MainActivity.this,"操作2",Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }

    //上下文操作模式结束时被调用
    @Override
    public void onDestroyActionMode(ActionMode actionMode) {
        Log.e("TAG","结束");
    }
};

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

第二块的显示效果为
在这里插入图片描述

三:Popupmenu(弹出菜单)
一般绑定在view的下方
在这里插入图片描述

    //popup_btn:演示PopupMenu
    final Button popupBtn = findViewById(R.id.popup_btn);
    popupBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //①实例化PopupMenu对象 (参数2:被锚定的view)
            final PopupMenu menu = new PopupMenu(MainActivity.this,popupBtn);
            //②加载菜单资源:利用MenuInflater将Menu资源加载到PopupMenu.getMenu()所返回的Menu对象中
            //将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(MainActivity.this,"复制",Toast.LENGTH_SHORT).show();
                            break;
                        case R.id.paste:
                            Toast.makeText(MainActivity.this,"粘贴",Toast.LENGTH_SHORT).show();
                            break;
                    }
                    return false;
                }
            });
            //④千万不要忘记这一步,显示PopupMenu
            menu.show();
        }
    });
}

在这里插入图片描述
三种菜单的演示完成

猜你喜欢

转载自blog.csdn.net/Derrick_itRose/article/details/107480582