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

Popupwindow showAsDropDown全面屏显示异常_android
要解决这个问题你应该知道 ​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的高度