如果要求弹出的PopupWindow里面是一个列表,我们使用时都是在里面套个ListView或RecyclerView ,现在我们不需要在做这样繁琐的工作了。
在官方android.support.v7.widget 包下提供的 PopupMenu 组件。
PopupMenu,弹出菜单,一个模态形式展示的弹出风格的菜单,绑在在某个View上,一般出现在被绑定的View的下方(如果下方有空间)。
使用方法:
- 新建menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu1"
android:title="菜单1" />
<item
android:id="@+id/menu2"
android:title="菜单2" />
<item
android:id="@+id/menu3"
android:title="菜单3" />
</menu>
PopupMenu popupMenu;
private void showPopMenu() {
if (popupMenu == null) {
popupMenu = new PopupMenu(ParentFrm, menu_more);
popupMenu.getMenuInflater().inflate(R.menu.reset_menu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu1:
// TODO: 2018/9/28
break;
default:
break;
}
return true;
}
});
}
popupMenu.show();
}
3.如果需要显示图标的话:
以前用到带图标的菜单时,一般都是通过自定义 PopupWindow 来实现的,比较麻烦,其实 PopupMenu 可以很简单的实现这个功能,不过需要用到反射。关于反射,我理解的不深,所以下面的代码也是从网上粘贴过来的。细心的同学可能会发现,在 xml 资源文件中,我在每个 item 标签里都写了 icon 的属性。没错,要显示的正是在这里设置的图片。当然,如果你不需要显示图标的话,icon 是没有必要写的。
try {
Field field = popupMenu.getClass().getDeclaredField("mPopup");
field.setAccessible(true);
MenuPopupHelper helper = (MenuPopupHelper) field.get(popupMenu);
helper.setForceShowIcon(true);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
20180928_214335.png
网友评论