答案
这个方法包含了 StatusBar
Point realSize = new Point();
Display realDisplay = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
realDisplay.getRealSize(realSize);
int h_screen = realSize.y;
情景
- 屏幕中间有个aButton,在aButton的下沿 弹出一个PopupWindow
- PopUpWindow,底部要和屏幕底部 齐平
- PopUpWindow高度 = 屏幕高度 - aButton.左上角Y - aButton.height
- 问题是: 屏幕高度 不包含statusBar,导致PopupWindow.height 小了,就无法和屏幕对齐
AButton {
int[] outLocation = new int[2];
getLocationOnScreen(outLocation); // AButton上部高度
Point realSize = new Point();
Display realDisplay = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
realDisplay.getRealSize(realSize);
int h_screen = realSize.y; // 屏幕高度
mRecyclerViewPopupWindow.setHeight(h_screen - outLocation[1] - getHeight());
mRecyclerViewPopupWindow.showAsDropDown(this);
}
失败的2个例子
- vivo x9(Android 7.1.2 API 25) 包含StatusBar高度-
- Oppo PEAT00 (Android 10, API 29)不包含StatusBar高度
DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
int w_screen = dm.widthPixels;
int h_screen = dm.heightPixels;
DisplayMetrics dm = new DisplayMetrics();
mActivity.getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenW = dm.widthPixels;
int screenH = dm.heightPixels;