Android_Menu

一、选项菜单OptionMenu

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

1、在res中新建一个menu类型的Resource DireDirection

2、新建Resource File

3、添加item

    <item android:title="保存"/>
    <item android:title="设置"/>

在菜单item中添加子菜单


<item android:title="保存"/>
    <item android:title="设置"/>
    <item android:title="更多操作">
        <menu >
            <item android:title="Item" />
        </menu>
    </item>
    创建OpitionMenu
    使用该方法指定opiton.xml指定为菜单文件
    getMenuInflater()返回一个MenuInflater对象而其中有一个inflate,传入option,并传入menu
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //加载菜单资源
        getMenuInflater().inflate(R.menu.option,menu);
        return true;
        //要return true 否则不显示
    }


menu item有很多其他功能

<item android:title="保存"
        android:icon="@mipmap/ic_launcher"
        app:showAsAction="ifRoom"/>

app:showAsAction可以将其直接放在操作栏

always一直放置在操作栏

ifRoom如果有空间的时候放在功能栏

设置icon并且showAsAction时图片会显示在功能栏,如果只设置icon将没有任何效果


添加id并实现onOpitionsItemSelected可以为选择MenuItem提供

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.save:
                Toast.makeText(MainActivity.this,"保存",Toast.LENGTH_SHORT).show();
                break;
            case R.id.setting:
                Toast.makeText(MainActivity.this,"设置",Toast.LENGTH_SHORT).show();
                break;
            case R.id.exit:
                Toast.makeText(MainActivity.this,"退出",Toast.LENGTH_SHORT).show();
                break;

        }
        return super.onOptionsItemSelected(item);
    }

二、上下文菜单ContextMenu

长按某个view不放,就会在屏幕弹出ContextMenu

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1、注册
        registerForContextMenu(findViewById(R.id.ctx_btn));
    }
    //2、与option累次
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        getMenuInflater().inflate(R.menu.context,menu);
    }
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        //item的点击与option相同
        return super.onContextItemSelected(item);
    }

为按钮设置上下文操作模式

1、实现ActionMode CallBack

2、在view的长按事件中启动上下文操作模式

使用上下文操作模式与以前的代码无关

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) {
            switch (menuItem.getItemId()){
                case R.id.del:
                    Toast.makeText(MainActivity.this,"del",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.rename:
                    Toast.makeText(MainActivity.this,"rename",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(cb);
                return false;
            }
        });

长按后菜单会出现在上方


三、PopupMenu 弹出菜单

一个模态形式展示的弹出风格的菜单,绑在某个View上,一般出现在被绑定的View的下方

//popupMenu
        final Button popupbtn = findViewById(R.id.popup_btn);
        findViewById(R.id.popup_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //实例化popupMenu对象
                PopupMenu menu = new PopupMenu(MainActivity.this,popupbtn);
                //加载菜单资源:利用MenuInflater将Menu资源加载到PopupMenu.getMenu()所返回的Menu对象中
                menu.getMenuInflater().inflate(R.menu.popou,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, "copy", Toast.LENGTH_SHORT).show();
                                break;
                            case R.id.paste:
                                Toast.makeText(MainActivity.this, "paste", Toast.LENGTH_SHORT).show();
                                break;
                        }
                        return true;
                    }

                });
                //!!!
                menu.show();
            }
        });

猜你喜欢

转载自blog.csdn.net/castanea/article/details/80992027