Android获取屏幕信息的几种方式

admin 2978次浏览

摘要:方式一 //获取屏幕信息的几种方式一: DisplayMetrics metrics = new DisplayMetrics(); WindowManager manager = (WindowManager) this.getSystemService(Service.WINDOW_SERVICE); if (ma

方式一

//获取屏幕信息的几种方式一:

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不变呢,这个有待考察。

相关文章
友情链接