Android开发之弹出菜单

  • Post author:
  • Post category:其他


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

item

MenuItem

: the menu item that was clicked

Returns

boolean

true

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等等可以设置点击事件的控件都是可以的。



版权声明:本文为wiseyue原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。