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