资料来源
https://blog.csdn.net/a379992210/article/details/48423923
https://blog.csdn.net/shanxuyang/article/details/47068487
popMenu
popMenu实现在某个view的上方或者下方显示一个折叠的系统风格的折叠菜单,向上还是向下弹出由系统控制(下方有空间从下方弹出,下方没有空间从上方弹出)
//初始化按钮 mPopMenuBtn = (Button) findViewById(R.id.button3); //为按钮注册点击事件 public void popMenuBtnOnClick(View view) { //新建一个popMenu实例 mPopMenu = new PopupMenu(this, mPopMenuBtn); //为这个实例的menu加载布局资源 mPopMenu.getMenuInflater().inflate(R.menu.menu_popup_window, mPopMenu.getMenu()); mPopMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { //do something return false; } }); mPopMenu.show(); }
popWindow
根popMenu类似
但是默认实现是点击控件后,在控件下方显示一个窗口,这个窗口可以指定大小以及显示位置,但是不能像popMenu一样自动调整从上方还是下方弹出
//初始化按钮 mPopWindowBtn = (Button) findViewById(R.id.button4); public void popWindowBtnOnClick(View view) { //通过布局文件获取一个View mPopWindowView = getLayoutInflater().inflate(R.layout.dialog_layout, null); //新建一个window,为这个window填充视图,指定宽度高度,指定是否可以点击 // Focusable 为True,PopupWindow的点击事件才会相应 mPopWindow = new PopupWindow(mPopWindowView, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT, true); mPopWindow.showAsDropDown(mPopWindowBtn); }
如果想要控制window弹出的位置
可以通过showAtLocation()来控制
注意窗口中的点击事件需要自己注册,没有类似于popMenu自己的监听器
文章来源: popmenu 和popWindow