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的高度

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