迁移语雀 2021-2-22
A PopupMenu displays a
Menu
in a modal popup window anchored to aView
. The popup will appear below the anchor view if there is room, or above it if there is not. If the IME is visible the popup will not overlap it until it is touched. Touching outside of the popup will dismiss it.
PopupMenu 可以以某个 View 为锚点,展示一个菜单栏。
会根据锚点、Gravity 以及空间展示,并且点击外部会消失。
使用步骤:
res
目录下 新建 menu 目录menu
目录下新建 foo.xml- 构建 PopupMenu,加载菜单
- 设置监听
- show() 展示
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/report" android:title="Report"/>
<item android:id="@+id/cancel" android:title="Cancel"/>
</menu>
PopupMenu menu = new PopupMenu(this, more, Gravity.BOTTOM);
menu.inflate(R.menu.foo);
menu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(final MenuItem menuItem) {
if (menuItem.getItemId() == R.id.report) {
Toast.makeText(MainActivity.this,"Report", Toast.LENGTH_SHORT).show();
}
return false;
}
});
menu.show();
PopupMenu myPopup = new PopupMenu(context, myAnchor);
myAnchor.setOnTouchListener(myPopup.getDragToOpenListener());
可以实现拖拽 anchor 弹出菜单。
修改背景色需要设置主题。
实际上 PopupMenu 的实现依赖于Window(MenuPopupWindow 等)