1.目前項(xiàng)目中常用通過(guò)WindowManager獲取手機(jī)屏幕的寬高來(lái)做一些UI展示,但是不兼容全面屏手機(jī)诚隙,手機(jī)分辨率2160 * 1080讶隐, 比如小米Mix2、錘子堅(jiān)果Pro2等機(jī)型
Display display = activity.getWindowManager().getDefaultDisplay();
int widths = display.getWidth();
int heights = display.getHeight(); //全面屏手機(jī)獲取的高度是2030,不包含底部的虛擬按鍵高度
解決的方法是通過(guò)獲取頂層Window寬高
View view = activity.getWindow().getDecorView();
int widths = view.getWidth();
int heights = view.getHeight(); //高度是2160
2.自定義Dialog可以通過(guò)獲取Window設(shè)置寬高
Window dialogWindow = dialog.getWindow();
lp = dialogWindow.getAttributes();
lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
lp.height = ViewGroup.LayoutParams.MATCH_PARENT; //注意一定要是MATCH_PARENT
dialogWindow.setAttributes(lp);
處理高斯模糊背景的dialog截屏的核心代碼
/**
* 截屏
*/
public static Bitmap takeScreenShot(Activity activity) {
Bitmap b = null;
try {
// 獲取windows中最頂層的view
View view = activity.getWindow().getDecorView();
view.buildDrawingCache();
// 獲取狀態(tài)欄高度
Rect rect = new Rect();
view.getWindowVisibleDisplayFrame(rect);
int statusBarHeights = rect.top;
int widths = view.getWidth();
int heights = view.getHeight();
//此獲取寬高的方式不適用全名屏, 不會(huì)包含底部的虛擬按鍵高度, 導(dǎo)致截屏過(guò)程中缺少這部分高度
//Display display = activity.getWindowManager().getDefaultDisplay();
// 獲取屏幕寬和高
//int widths = display.getWidth();
//int heights = display.getHeight();
// 允許當(dāng)前窗口保存緩存信息
view.setDrawingCacheEnabled(true);
// 去掉狀態(tài)欄
b = Bitmap.createBitmap(view.getDrawingCache(), 0,
statusBarHeights, widths, heights - statusBarHeights);
// 銷(xiāo)毀緩存信息
view.destroyDrawingCache();
} catch (Exception e) {
e.printStackTrace();
}
return b;
}
3.處理效果對(duì)比:
上下空白間距
對(duì)比照01.png
底部模糊未覆蓋
對(duì)比照3.png