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显示问题的方法、如果你有更好的方法、欢迎吐槽