一、Android手机屏幕DPI
DPI概念自行百度
Android手机按照不同DPI分为:ldpi、mdpi、 hdpi、 xhdpi、 xxhdpi等。
在不同的DPI上,px和dp有不同的比例关系,关系如下
DPI类型 | DPI | dp | px |
---|---|---|---|
ldpi | 120 | 1 | 0.75 |
mdpi | 160 | 1 | 1 |
hdpi | 240 | 1 | 1.5 |
xhdpi | 320 | 1 | 2 |
Nexus 5x | 420 | 1 | ≈2.6 |
xxhdpi | 480 | 1 | 3 |
Nexus 6/6p | 560 | 1 | 3.5 |
二、不同设备的dp宽度
设备 | 分辨率 | DPI | 宽(px) | 宽(dp) |
---|---|---|---|---|
HTC Tatoo | 240x320 | 120 (ldpi) | 240 | 320 |
LG Optimus | 320x480 | 160 (mdpi) | 320 | 320 |
Nexus one/s | 480x800 | 240 (hdpi) | 480 | 320 |
Galaxy Nexus | 720x1280 | 320 (xhdpi) | 720 | 360 |
Nexus 5 | 1080x1920 | 480 (xxhdpi) | 1080 | 360 |
Nexus 5x | 1080x1920 | 420 | 1080 | ≈411.4 |
Nexus 6/6p | 1440x2560 | 560 | 1440 | ≈411.4 |
由上表可知:
- 在ldpi、mdpi和hdpi设备上屏幕的宽度都是320dp
- 在xhdpi和xxhdpi设备上屏幕的宽度都是360dp
- 而在420dpi和560dpi设备上屏幕的宽度都约等于411.4dp
三、面临的问题
目前主流的分辨率一般为720x1280和1080x1920,所以一般设计师在设计Android应用时会选择720x1280的画布进行设计,如果只切一套图,工程师会把图放到xhdpi的资源文件夹中,此时,在xhdpi和xxhdpi的屏幕上都可以正常适配,但是在hdpi的屏幕上就会出现问题。
从上面的表格可以知道在xhdpi和xxhdpi时,屏幕的dp宽都是360dp;而在480x800的hdpi时,屏幕的dp宽度是320dp,少了40个dp,如果屏幕的dp宽度保持360dp的话,需要的像素宽度应该是540px,但市面上大部分的hdpi的手机都是480px的像素宽度。
为了适配480x800的手机屏幕,需要设计师在切图的时候也要切出一套hdpi的图,并且是480*800分辨率下的hdpi的图。
另外在写布局文件设置宽度的时候,也要需要考虑这个差值,hdpi下的dp宽度应该是xhdpi或xxhdpi下的dp宽度的0.8~0.9倍