Popupwindow showAsDropDown全面屏显示异常

PopupWindow(上)中介绍了showAsDropDown()方法,在Android 6的非全面屏手机上显示正常,但是在Android 10的全面屏手机上显示有问题,当 popupwindow 的大小都是 match_parent 时,使用showAsDropDown 并不会 显示在指定view的下方,而是全屏显示:

在这里插入图片描述
要解决这个问题你应该知道 getGlobalVisibleRect、getLocalVisibleRect、getLocationInWindow、getLocationOnScreen 这些方法

解决办法:

private void showPopupWindow(){
        View view = LayoutInflater.from(this).inflate(R.layout.popuplayout,null);
        final PopupWindow popupWindow = new PopupWindow(view);

        Rect rect1 = new Rect();
        ll.getWindowVisibleDisplayFrame(rect1);

        Rect rect2 = new Rect();
        ll.getGlobalVisibleRect(rect2);

        popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        popupWindow.setHeight(rect1.bottom - rect2.bottom);

        final View pop_computer = view.findViewById(R.id.pop_computer);
        pop_computer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                popupWindow.dismiss();
            }
        });

        popupWindow.showAsDropDown(ll);
    }

其中 ll 就是 popupwindow 要显示在哪个 view的下方。解决思路就是 展示popupwindow 时重新设置 popupwindow 高度,这个高度 = 全面屏高度 - ll 底部到屏幕top的高度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章