Android入门——Menu

1 选项菜单——OptionMenu

1.1 基本使用

  • res目录下创建menu目录,并且创建menu资源文件。
    在这里插入图片描述
  • 插入菜单项
	<?xml version="1.0" encoding="utf-8"?>
	<menu xmlns:app="http://schemas.android.com/apk/res-auto"
	    xmlns:android="http://schemas.android.com/apk/res/android">
	
	    <item android:title="menuItem1" />
	    <item android:title="menuItem2" >
	        <menu >
	            <item android:title="Item21" />
	            <item android:title="Item22" />
	        </menu>
	    </item>
	</menu>

在这里插入图片描述

  • activity中创建OptionMenu,重写onCreateOptionsMenu()方法
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.option_menu, menu);
        return true;
    }

1.2 常用属性

  • <item>标签属性
    • 设置成always会使得该菜单项直接显示在标题栏上

      在这里插入图片描述
    • 如果设置了图标,则不显示文字,直接显示图标
		<item android:title="menuItem1"
        	  app:showAsAction="always"
        	  android:icon="@mipmap/ic_launcher"/>

在这里插入图片描述

1.3 为菜单项添加响应事件

	@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.m1:
                Toast.makeText(this, "m1", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
        return true;
    }

注:最多允许含有一层子菜单

2 上下文菜单——ContextMenu

  • 长按某个view而弹出的菜单,称为上下文菜单

2.1 使用

  • 使用registerForContextMenu()方法将上下文菜单注册到某个view上
	Button btn = findViewById(R.id.button_context);
    registerForContextMenu(btn);
  • 创建菜单,重写onCreateContextMenu()方法
    @Override
    public void onCreateContextMenu(android.view.ContextMenu menu, View v, android.view.ContextMenu.ContextMenuInfo menuInfo) {
        getMenuInflater().inflate(R.menu.context_menu, menu);
    }
  • 菜单项的操作,重写onContextItemSelected()方法即可,具体做法与选项菜单的代码相同。
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        ...
        ...
    }
  • 效果
    在这里插入图片描述

2.2 实现上下文操作模式

  • 不同于2.1节中的实现方式,本节中是通过view的长按事件来实现的,具体步骤如下:
  1. 实现ActionModeCallBack接口
    ActionMode.Callback cb = new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            getMenuInflater().inflate(R.menu.context_menu, menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        	...
        	...
            return true;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {

        }
    };
  • onCreateActionMode():在启动时调用,在这里指定菜单资源
  • onPrepareActionMode():创建完成后调用此方法
  • onActionItemClicked():添加菜单的点击事件,跟之前的一样
  • onDestroyActionMode():上下文操作模式结束时被调用
  1. 在view的长按事件中启动上下文操作模式
    findViewById(R.id.button_context).setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            startActionMode(cb);
            return false;
        }
    });

此时,菜单项会出现在顶部的标题栏中
在这里插入图片描述

3 弹出式菜单——PopupMenu

  • 弹出式菜单是指单击view后弹出的菜单,因此绑定到view的单击事件中即可,一般包含以下步骤:
  1. 绑定单机事件
  2. 实例化PopupMenu对象
  3. 加载菜单资源
  4. 设置点击监听器
    final Button popupBtn = findViewById(R.id.button_popup);
    popupBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 参数2:锚定的view
            PopupMenu menu = new PopupMenu(ContextMenu.this, popupBtn);
            // 将资源文件加载到menu上
            menu.getMenuInflater().inflate(R.menu.context_menu, menu.getMenu());
            // 添加响应事件
            // 最重要的是调用show方法
            menu.show();
        }
    });
  • 最终效果,单击按钮时显示如下菜单
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值