Android 獲取螢幕的多種寬高資訊
阿新 • • 發佈:2019-02-13
包含的寬高資訊如下圖所示:
在模擬器上獲取到的資料:
08-26 07:19:32.712 7834-7834/com.czy.screeninfo E/MainActivity: getTotalScreenHeight 1920
08-26 07:19:33.505 7834-7834/com.czy.screeninfo E/MainActivity: getScreenWidth 1080
08-26 07:19:34.211 7834-7834/com.czy.screeninfo E/MainActivity: getAvailableScreenHeight 1794
08-26 07:19:34.979 7834-7834/com.czy.screeninfo E/MainActivity: getStatusBarHeight 63
08-26 07:19:35.580 7834-7834/com.czy.screeninfo E/MainActivity: getVirtualBarHeightIfRoom 126
08-26 07:19:36.340 7834-7834/com.czy.screeninfo E/MainActivity: getVirtualBarHeight 126
08-26 07:19:37.048 7834-7834/com.czy.screeninfo E/MainActivity: getTitleHeight 147
具體的程式碼:
/**
* 作者: chenZY
* 時間: 2017/8/26 14:37
* 描述:
*/
public class ScreenUtils {
/**
* 返回包括虛擬鍵在內的總的螢幕高度
* 即使虛擬按鍵顯示著,也會加上虛擬按鍵的高度
*/
public static int getTotalScreenHeight(Activity activity) {
DisplayMetrics displayMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
return displayMetrics.heightPixels;
}
/**
* 返回螢幕的寬度
*/
public static int getScreenWidth(Activity activity) {
DisplayMetrics displayMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
return displayMetrics.widthPixels;
}
/**
* 返回螢幕可用高度
* 當顯示了虛擬按鍵時,會自動減去虛擬按鍵高度
*/
public static int getAvailableScreenHeight(Activity activity) {
DisplayMetrics displayMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.heightPixels;
}
/**
* 狀態列高度
*/
public static int getStatusBarHeight(Activity activity) {
int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
return activity.getResources().getDimensionPixelSize(resourceId);
}
/**
* 獲取虛擬按鍵的高度
* 會根據當前是否有顯示虛擬按鍵來返回相應的值
* 即如果隱藏了虛擬按鍵,則返回零
*/
public static int getVirtualBarHeightIfRoom(Activity activity) {
DisplayMetrics displayMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int usableHeight = displayMetrics.heightPixels;
activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
int realHeight = displayMetrics.heightPixels;
return realHeight - usableHeight;
}
/**
* 獲取虛擬按鍵的高度,不論虛擬按鍵是否顯示都會返回其固定高度
*/
public static int getVirtualBarHeight(Activity activity) {
int resourceId = activity.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
return activity.getResources().getDimensionPixelSize(resourceId);
}
/**
* 標題欄高度,如果隱藏了標題欄則返回零
*/
public static int getTitleHeight(Activity activity) {
return activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
}
/**
* 將dp值轉換為px值
*/
public static int dp2px(Context context, float dpValue) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 將px值轉換為dp值
*/
public static int px2dp(Context context, float pxValue) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}