尺寸概念
resolution
:以像素数表示的高度与宽度
dpi
:dots per inch,一英寸的像素数量
分辨率可各种检测软件查得,也可由adb命令行查看:
adb shell wm size
dpi可由计算得出,但实际效果是由厂家制定的dpi而定的:
- 厂家
adb shell getprop ro.sf.lcd_density
计算
例1:分辨率为1920*1080,5.5英寸,dpi计算可得:
dpi=19202+10802−−−−−−−−−−−√5.5=400
例2:分辨率为1920*1200,7英寸,dpi计算可得:
dpi=19202+12002−−−−−−−−−−−√7=323
屏幕适配
Android的屏幕适配大体分三部分,一部分体现在drawble
中,一部分体现在values
中,还有一部分体现在layout
(暂不讨论)。
- drawble
drawble的适配很好理解,将图片放入相应的文件夹内,应用就会根据自身的dpi去调用该文件夹的图片进行显示渲染。
drawble | dpi |
---|---|
drawble-ldpi | 120 |
drawble-mdpi | 160 |
drawble-hdpi | 240 |
drawble-xdpi | 320 |
drawble-xxdpi | 480 |
- values
values的适配主要靠dimens.xml
中自定的dp、sp等常量单位来控制真实显示的大小。理论上,在dpi=160的屏幕中,1dp=1sp=1px;同理,dpi=320的时候,1dp=1sp=2px。
values | dp |
---|---|
values-w820dp | 适配宽度为820dp的屏幕 |
values-sw500dp | 适配最小宽度为500dp的屏幕(宽高均大于500dp) |
values-land | 适配横置屏幕 |
values-600dp-land | 适配横置时宽度为600dp的屏幕 |
values-port | 适配竖立屏幕 |
values-500dp-port | 适配竖立时宽度为500dp的屏幕 |
values-1920x1080 | 精确适配分辨率为1920*1080的屏幕 |
那么问题来了,这个w820dp中的820dp是什么意思?
例1:分辨率为1920*1080,5.5英寸,dpi计算得到为400,厂家制定为480,那么其宽高分别为:
w=1920480/160=640dp
h=1080480/160=360dp
例2:分辨率为1920*1200,7英寸,dpi计算得到为323,厂家制定为320,那么其宽高分别为:
w=1920320/160=960dp
h=1200320/160=600dp
值得注意一点的是,dpi是以厂家制定为准的,计算而出的只能作为大概的参考,这个只要自己测试一下就可以得出结论。