屏幕信息

Android手机屏幕的尺寸、分辨率多种多样,这为绘图造成了一定的难度,想要在不同的屏幕上保持绘图的准确性,需要对屏幕的信息有充分了解。

屏幕参数

通常Android手机屏幕有下面几个参数:

  • 屏幕尺寸
    指屏幕对角线的长度,通常使用“寸”表示,比如4.7寸手机。

  • 分辨率
    指屏幕像素点的个数,例如720 x 1280分辨率手机表示:宽有个720个像素点,高有1280个像素点。

  • ppi或dpi
    指每英寸像素(Pixels Per Inch),又称dpi(Dots Per Inch),由对角线的像素点个数除以屏幕的尺寸得到。

Android系统屏幕密度

虽然Android手机有各种尺寸和分辨率,但是Android系统定义了几个标准的dpi值,在具体适配时,只需要对下面表格里的标准dpi进行适配即可。

屏幕类型 ldpi mdpi hdpi xhdpi xxhdpi
密度值 120 160 240 320 480
分辨率 240x320 320x480 480x800 720x1280 1080x1920

独立像素密度dp

由于Android手机屏幕密度不同,因此,同样的像素点个数在不同屏幕上显示的长度也不同,因为高密度屏幕在同样的长度范围包含更多像素点。为了解决这个问题,Android系统使用dp(Device Independent Pixels,又称dip)表示屏幕长度,并规定在mdpi中,1dp = 1px,这样可以根据屏幕的密度值进行换算,得到每种屏幕密度对应的像素数目,例如,在xhdpi中,1dp = 320/160 * 1px = 2px。

单位转换

根据上面的分析,可以手动对像素单位进行转换,不过更好的方式是使用系统的TypedValue类,代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* dip to pixels
*/
public static float dipToPixels(Context context, float dipValue) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics);
}

/**
* sp to pixels
*/
public static float spToPixels(Context context, float spValue) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spValue, metrics);
}
坚持原创技术分享,您的支持将鼓励我继续创作!