最近在写公司项目的时候使用popupwindow进行条件筛选,还是像以前一样直接使用popupwindow.showAsDropDown(view)方法进行设置popupwindow的显示位置,结果popupwindow没有显示在view下面,而是铺满了整个屏幕。
然后经过多次更换手机调试效果,反应出来的是7.0以前的版本使用popupwindow.showAsDropDown(view)显示没有问题,7.0以后的都会铺满整个屏幕(如图)。
然后使用另一个方法popupwindow.showAtLocation(parent,gavity,x,y),结果y方向的偏移量上出现了问题,同样的高度,有的手机刚刚好,有的手机却偏移的太多,如图:
在网上查看发现是应为popupwindow的高度太高导致的铺满屏幕,那么就要在显示popupwindow的时候重新设置其高度就没有问题了,解决办法如下:
重写popupwindow的showAsDropDown方法即可
@Override public void showAsDropDown(View anchor) { if (Build.VERSION.SDK_INT >= 24) { Rect rect = new Rect(); anchor.getGlobalVisibleRect(rect);// 以屏幕 左上角 为参考系的 int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom; //屏幕高度减去 anchor 的 bottom setHeight(h);// 重新设置PopupWindow高度 } super.showAsDropDown(anchor); }
这样就完美解决了