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