Android 获取屏幕宽度、高度、dpi等信息

在Android中,关于屏幕的宽度、高度等的信息都封装在DisplayMetrics 类中,获取 DisplayMetrics 的方法以下几种:

不需要用到 context 的:

第一种:

DisplayMetrics metrics = new DisplayMetrics();
WindowManager manager = (WindowManager) context.getSystemService(Service.WINDOW_SERVICE);
if (manager != null) {
    manager.getDefaultDisplay().getMetrics(metrics);
}

需要用到 context 的:

第二种:

DisplayMetrics metrics = context.getResources().getDisplayMetrics();

第三种:

DisplayMetrics metrics = new DisplayMetrics();
context.getDisplay().getMetrics(metrics);

第四种:与第三种的方式类似,通过ApplicationContext获取。

DisplayMetrics metrics = new DisplayMetrics();
context.getApplicationContext().getDisplay().getMetrics(metrics);

 拿到DisplayMetrics之后,就可以访问里面的属性了:

// 屏幕的逻辑密度,是密度无关像素(dip)的缩放因子,160dpi是系统屏幕显示的基线,1dip = 1px, 所以,在160dpi的屏幕上,density = 1, 而在一个120dpi屏幕上 density = 0.75。
float density = metrics.density; 

//  屏幕的绝对宽度(像素)
int screenWidth = metrics.widthPixels;

// 屏幕的绝对高度(像素) 
int screenHeight = metrics.heightPixels; 

 //  屏幕上字体显示的缩放因子,一般与density值相同,除非在程序运行中,用户根据喜好调整了显示字体的大小时,会有微小的增加。
float scaledDensity = metrics.scaledDensity;

// X轴方向上屏幕每英寸的物理像素数。
float xdpi = metrics.xdpi; 

// Y轴方向上屏幕每英寸的物理像素数。
float ydpi = metrics.ydpi; 

// 每英寸的像素点数,屏幕密度的另一种表示。densityDpi = density * 160.
float desityDpi = metrics.densityDpi; 
...

 

你可能感兴趣的:(Android)