DisplayMetrix是Android下关于显示屏信息的结构类,包括显示屏大小、密度等等。
DisplayMetrix中没有什么方法,在实际应用中主要使用其内部的几个public成员变量,其定义如下:
public static final int DENSITY_LOW = 120;
public static final int DENSITY_MEDIUM = 160;
public static final int DENSITY_HIGH = 240;
上面三个是关于密度定义的常量
public static final int DENSITY_DEFAULT = DENSITY_MEDIUM;
默认密度为DENSITY_MEDIUM
public int widthPixels; //X方向宽度,单位为px
public int heightPixels; //Y方向高度,单位为px
public float density; //逻辑密度,以DENSITY_MEDIUM(160)为基准,即实际大小为density*DENSITY_MEDIUM。在代码中的常用单位dip
//与此的关系是:1px = density * 1dip。比如在代码中定义长度为16dip,density为1.5,那么在实际显示时,其占据
//的屏幕大小为16 * 1.5 = 24px
public int densityDpi; //DPI密度,density = densityDpi / DENSITY_MEDIUM;
public float scaledDensity; //字体缩放密度,还不知道具体含义
public float xdpi; //X方向的dpi
public float ydpi; //Y方向的dpi
这几个成员中,最主要的是density,不过density可以通过xdpi和ydpi来求得,即简单的勾股定理:
density = Math.sqrt(Math.pow(xdpi, 2), Math.pow(ydpi, 2)) / DENSITY_MEDIUM;
通过这几个变量,也可以求得设备的尺寸,步骤如下:
1、计算X方向的宽度:x = widthPixels / xdpi;
2、计算Y方向的高度,y = heightPixels / ydpi;
3、勾股定理:size = Math.sqrt(Math.pow(x, 2), Math.pow(y, 2)) //这里设备尺寸指对角线长度
在三星Galaxy Tab P1000上测试:
widthPixels = 600
heightPixels = 1024
xdpi = 168.89351
ydpi = 169.33333
求得屏幕尺寸为7寸屏
注:从网上看到有下面求屏幕尺寸的方法:
这种方法是错误的,因为diagonalPixels是屏幕对角线长度,而density*160是每inch的pixel,是单位正方形的对角线,两者根本不能做除法。
附:Android分辨率相关基础概念: