Android7.0+popupwindow位置设置问题(showAsDropDown方法)

时间:2024-03-31 09:26:41

最近在写公司项目的时候使用popupwindow进行条件筛选,还是像以前一样直接使用popupwindow.showAsDropDown(view)方法进行设置popupwindow的显示位置,结果popupwindow没有显示在view下面,而是铺满了整个屏幕。

然后经过多次更换手机调试效果,反应出来的是7.0以前的版本使用popupwindow.showAsDropDown(view)显示没有问题,7.0以后的都会铺满整个屏幕(如图)。

Android7.0+popupwindow位置设置问题(showAsDropDown方法)

然后使用另一个方法popupwindow.showAtLocation(parent,gavity,x,y),结果y方向的偏移量上出现了问题,同样的高度,有的手机刚刚好,有的手机却偏移的太多,如图:

Android7.0+popupwindow位置设置问题(showAsDropDown方法)Android7.0+popupwindow位置设置问题(showAsDropDown方法)在网上查看发现是应为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);
}
这样就完美解决了

相关文章