方式一
//獲取屏幕信息的幾種方式一:
DisplayMetrics metrics = new DisplayMetrics();
WindowManager manager = (WindowManager) this.getSystemService(Service.WINDOW_SERVICE);
if (manager != null) {
manager.getDefaultDisplay().getMetrics(metrics);
}
方式二
///////////////////////////////////////////////////////
//獲取屏幕信息的幾種方式二:
WindowManager windowManager = getWindowManager();
DisplayMetrics metrics2=new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(metrics2);
方式三
//獲取屏幕信息的幾種方式三:
Resources resources = getResources();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
三種方式獲取屏幕相關信息
float density = metrics.density;
Log.e("zyb", "方式1:==density:::::::" + density);
Log.e("zyb", "方式2:==density:::::::" + metrics2.density);
Log.e("zyb", "方式3:==density:::::::" + displayMetrics.density);
// 屏幕的絕對寬度(像素)
int screenWidth = metrics.widthPixels;
Log.e("zyb", "方式1:==screenWidth:::::::" + screenWidth);
Log.e("zyb", "方式2:==screenWidth:::::::" + metrics2.widthPixels);
Log.e("zyb", "方式3:==screenWidth:::::::" + displayMetrics.widthPixels);
// 屏幕的絕對高度(像素)
int screenHeight = metrics.heightPixels;
Log.e("zyb", "方式1:==screenHeight:::::::" + screenHeight);
Log.e("zyb", "方式2:==screenHeight:::::::" + metrics2.heightPixels);
Log.e("zyb", "方式3:==screenHeight:::::::" + displayMetrics.heightPixels);
// 屏幕上字體顯示的縮放因子,一般與density值相同,除非在程序運行中,用戶根據喜好調整了顯示字體的大小時,會有微小的增加。
float scaledDensity = metrics.scaledDensity;
Log.e("zyb", "方式1:==scaledDensity:::::::" + scaledDensity);
Log.e("zyb", "方式2:==scaledDensity:::::::" + metrics2.scaledDensity);
Log.e("zyb", "方式3:==scaledDensity:::::::" + displayMetrics.scaledDensity);
// X軸方向上屏幕每英寸的物理像素數。
float xdpi = metrics.xdpi;
Log.e("zyb", "方式1:==xdpi:::::::" + xdpi);
Log.e("zyb", "方式2:==xdpi:::::::" + metrics2.xdpi);
Log.e("zyb", "方式3:==xdpi:::::::" + displayMetrics.xdpi);
// Y軸方向上屏幕每英寸的物理像素數。
float ydpi = metrics.ydpi;
Log.e("zyb", "方式1:==ydpi:::::::" + ydpi);
Log.e("zyb", "方式2:==ydpi:::::::" + metrics2.ydpi);
Log.e("zyb", "方式3:==ydpi:::::::" + displayMetrics.ydpi);
// 每英寸的像素點數,屏幕密度的另一種表示。densityDpi = density * 160.
float desityDpi = metrics.densityDpi;
Log.e("zyb", "方式1:==desityDpi:::::::" + desityDpi);
Log.e("zyb", "方式2:==desityDpi:::::::" + metrics2.densityDpi);
Log.e("zyb", "方式3:==desityDpi:::::::" + displayMetrics.densityDpi);
// //獲取屏幕相關信息的集中方式
Log.e("zyb", "字體縮放fontScale = " + getResources().getConfiguration().fontScale);
三種方式的log信息
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式1:==density:::::::2.75
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式2:==density:::::::2.75
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式3:==density:::::::2.75
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式1:==screenWidth:::::::1080
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式2:==screenWidth:::::::1080
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式3:==screenWidth:::::::1080
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式1:==screenHeight:::::::2029
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式2:==screenHeight:::::::2029
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式3:==screenHeight:::::::2029
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式1:==scaledDensity:::::::2.75
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式2:==scaledDensity:::::::2.75
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式3:==scaledDensity:::::::2.8874998
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式1:==xdpi:::::::403.411
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式2:==xdpi:::::::403.411
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式3:==xdpi:::::::403.411
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式1:==ydpi:::::::402.107
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式2:==ydpi:::::::402.107
2019-12-27 15:04:51.210 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式3:==ydpi:::::::402.107
2019-12-27 15:04:51.211 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式1:==desityDpi:::::::440.0
2019-12-27 15:04:51.211 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式2:==desityDpi:::::::440
2019-12-27 15:04:51.211 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 方式3:==desityDpi:::::::440
2019-12-27 15:04:51.211 28767-28767/com.syswin.companysyswinclient.zhang E/zyb: 字體縮放fontScale = 1.05
根據log看出三種獲取屏幕信息的方式基本上都是一樣,但是scaledDensity這個字段稍有不同,這個是字段解釋是:顯示屏上顯示的字體的比例因子,一般和density一致,除非用戶根據喜好設置字體大小,纔會發生變化。log最後一行打印fontScale的值,fontScale含義:當前用戶對字體縮放比例的偏好,相對於基礎密度縮放比例,基礎比例是1.0,我修改過系統字體的大小,所有現在是1.05,那麼爲什麼前兩種方式scaledDensity不變呢,這個有待考察。