Android开发之弹出菜单

PopupMenu.OnMenuItemClickListener主要有两个公用方法:

1. public static interface PopupMenu.OnMenuItemClickListener 

2.android.widget.PopupMenu.OnMenuItemClickListener

一般常用的是第二个,但是如果item本身没有单独的itemClickListener,那么就用第一个静态接口的方法来接收菜单项单击事件。

对于第二个,导入widget包和v7包的widget包均可以

下面我们来看一下AndroidAPI28上面对于这个方法的介绍

Public methods(公用方法)

onMenuItemClick ()                             added in API level 11

public abstract boolean onMenuItemClick (MenuItem item)

This method will be invoked when a menu item is clicked if the item itself did not already handle the event.(如果menu item本身尚未处理事件,则在单击菜单项时将调用此方法。)

Parameters
itemMenuItem: the menu item that was clicked

 

Returns
booleantrue if the event was handled, false otherwise

下面看下在as中的具体代码:

1.首先需要写一个menu的xml文件,每一个item代表菜单里的一项

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_time"
        android:title="Time" />
    <item
        android:id="@+id/action_name"
        android:title="Name" />
</menu>

然后在相应的activity中绑定所需点击事件的控件,给控件设置点击监听器,

实例化PopupMenu对象,通过该对象调用getMenuInfllater获得MenuInflater对象

再绑定menu文件,最后写菜单项的点击事件

ImageView menu;
menu = findViewById(R.id.menu_title);
menu.setOnClickListener(listener);

private View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.menu_title:
                showOrderMenu(view);
                break;
        }
    }
};

private void showOrderMenu(View view) {
    PopupMenu popupMenu = new PopupMenu(this, view);
    popupMenu.getMenuInflater().inflate(R.menu.menu, popupMenu.getMenu());
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_time:
                    //doSomething
                    return true;
                case R.id.action_name:
                    //doSomething
                    return true;
            }
            return false;
        }
    });
    popupMenu.show();
}

在这里我是给一个ImageView设置的点击菜单弹出事件,诸如Button,Textview,LinearLayout等等可以设置点击事件的控件都是可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值