Android7.0中PopupWindow showAtLocation()弹出位置异常问题
2016-12-21 13:21:29  By: dwtedx

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

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+