Popupwindow showAsDropDown全面屏显示异常
原创
©著作权归作者所有:来自51CTO博客作者qq5d510d208e604的原创作品,请联系作者获取转载授权,否则将追究法律责任
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的高度