欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Android7.0中PopupWindow showAtLocation()弹出位置异常问题

程序员文章站 2021-12-25 11:00:14
...

我们在Android开发中经常会使用到PopupWindow来显示内容、在Android7.0以前、我们可以直接使用popupWindow.showAsDropDown(anchorView);来显示PopupWindow和里面的内容、但是在Android 7.0之后、这种方法是不行的、必须要使用showAtLocation对其定位、才能使显示的PopupWindow位置不会错乱、那么到底要怎么来写这个代码呢、今天就给大家分享一下我是怎么解决Android 7.0 PopupWindow的显示位置错乱的


Android 7.0之前PopupWindow显示方法

//定义一个PopupWindow变量,并设置宽、高
PopupWindow popupWindow = new PopupWindow(mWidth, mHeight);
popupWindow.setFocusable(true);
//在某个控件下方弹出
popupWindow.showAsDropDown(anchorView);


或者是

//定义一个PopupWindow变量,并设置宽、高
PopupWindow popupWindow = new PopupWindow(mWidth, mHeight);
popupWindow.setFocusable(true);
//在某个控件下方弹出
popupWindow.showAsDropDown(anchorView);
popupWindow.setOutsideTouchable(true);
popupWindow.showAtLocation(anchorView, Gravity.BOTTOM, 0, 0);


Android 7.0之后PopupWindow显示方法

那么在Android 7.0之使用以上代码就会出现显示错乱的问题、我的解决方案是先获取整个屏幕的高度、然后使用整个屏幕的高度减去PopupWindow的布局内容高度、让整个PopupWindow能够绝对定位到屏幕的相应位置上面


1、获取屏幕高度

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
mWidthPixels = dm.widthPixels;
mHeightPixels = dm.heightPixels;


2、获取PopupWindow高度

View view = LayoutInflater.from(context).inflate(R.layout.adapter_popwindow, null);
PopupWindow popupWindow = new PopupWindow(view, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, false);
popupWindow.getContentView().measure(0,0);
int popHeight = popupWindow.getContentView().getMeasuredHeight();


3、显示PopupWindow

popupWindow.showAtLocation(parentView, Gravity.LEFT, 0, mHeightPixels - popHeight);
popupWindow.setFocusable(true);
popupWindow.setOutsideTouchable(true);
popupWindow.update();


以上就是我在解决Android 7.0之后PopupWindow显示问题的方法、如果你有更好的方法、欢迎吐槽