欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-26 20:37:22
...

安卓3.0之前的菜单为
Android菜单的创建以及使用(详细介绍)
安卓3.0之后的菜单为
Android菜单的创建以及使用(详细介绍)
创建一个layout,便于演示
Android菜单的创建以及使用(详细介绍)

菜单的分类:
一:Optionmenu(选项菜单)
Android菜单的创建以及使用(详细介绍)
Android菜单的创建以及使用(详细介绍)
一般选项菜单只有两层,否则会影响用户体验
代码演示为:
1.在res目录下先创建一个资源文件夹
Android菜单的创建以及使用(详细介绍)
2.选择资源类型为menu即可
菜单的代码为:
一般情况下为拖拽添加
Android菜单的创建以及使用(详细介绍)

其中一个代码为
showAsAction属性值:always :直接在标题栏显示
never:不显示
withText:控制图标和文本一起显示
ifRoom:有空间就显示
有id的作用是为了在代码文件中便于操作
Android菜单的创建以及使用(详细介绍)

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

二:Contextmenu(上下文菜单)
长按一个view不放,就会弹出上下文菜单
个人感觉要分为两大块,两大块都能实现上下文菜单,第二大块使用较多用按钮ctx_btn:演示ContextMenu
第一块
让其在屏幕的*显示
1.注册registerForContextMenu(findViewById(R.id.ctx_btn));
2.创建 覆盖onCreateContextMenu
3.菜单项的操作 覆盖onContextItemSelected
Android菜单的创建以及使用(详细介绍)
②第二块
将选项菜单放置在屏幕的上方启动
为按钮设置上下文操作模式
①实现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;
        }
    });

第二块的显示效果为
Android菜单的创建以及使用(详细介绍)

三:Popupmenu(弹出菜单)
一般绑定在view的下方
Android菜单的创建以及使用(详细介绍)

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

Android菜单的创建以及使用(详细介绍)
三种菜单的演示完成

相关标签: 菜单 android