美文网首页
PopupWindow:华为7.0上位置显示错乱

PopupWindow:华为7.0上位置显示错乱

作者: 沐风雨木 | 来源:发表于2018-02-13 17:11 被阅读428次

    做项目的时候,经常需要弹出弹出框,第一次我选择了用Dialog来做,第二次我用了Popupwindow来做,实现复杂度上都差不多。
    其中最本质的差别就是:
        AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。
        这两种区别的表现是:
    AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。
    因为许多地方都有弹框提示信息的需求,于是便自定义了一个PopupWindow类,后来在华为7.0手机上popupwindow位置错乱,其他机型当时没有发现出来(可能由于我们公司机型少),后来重写了PopupWindow类的showAsDropDown()方法,代码如下:

        @Override
        public void showAsDropDown(View anchor, int xoff, int yoff) {
            if (Build.VERSION.SDK_INT >= 24) {
                Rect rect = new Rect();
                anchor.getGlobalVisibleRect(rect);
                int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom;
                setHeight(h);
            }
            super.showAsDropDown(anchor, xoff, yoff);
        }
    

    这样PopupWindow位置就正确显示了。

    相关文章

      网友评论

          本文标题:PopupWindow:华为7.0上位置显示错乱

          本文链接:https://www.haomeiwen.com/subject/dwurtftx.html