虽然一直在布局文件里面使用长度的计量单位dip。可是一直弄不清楚他到底表示什么,是怎么进行计算的。
其实dip就是一个物理长度单位,跟厘米是同一个概念。也就是说不管你的屏幕分辨率是多少都好,我的长度就定死这么长了。所以可以把它看成跟厘米一样的计量单位。
计算方法:
首先要引入DPI的概念,DPI表示每英寸像素数,就是你手机屏幕像素除以手机的宽高。如120dpi,160dpi等,假设QVGA(320*240)分辨率的屏幕物理尺寸是(2英寸*1.5英寸),dpi=160。
而dip = px / (DPI / 160)。这个公式可以换算为Px / screenWidthPx = dip / (width * 160)。因此dip是一个跟厘米一样的物理计量单位,不是我过去认为的一个比例。
如何做到自适应屏幕大小呢?
1)界面布局方面
需要根据物理尺寸的大小准备5套布局,layout(放一些通用布局xml文件,比如界面中顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的title bar),layout-small(屏幕尺寸小于3英寸左右的布局),layout-normal(屏幕尺寸小于4.5英寸左右),layout-large(4英寸-7英寸之间),layout-xlarge(7-10英寸之间)
2)图片资源方面
需要根据dpi值准备5套图片资源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi
Android有个自动匹配机制去选择对应的布局和图片资源
屏幕级别
|
屏幕密度
|
比率(相对)
|
物理大小(英寸)
|
像素大小
|
通常的分辨率
| |
ldpi
|
120
|
3
|
0.75
|
1
|
120
| |
mdpi
|
160
|
4
|
1
|
1
|
160
|
320*480
|
hdpi
|
240
|
6
|
1.5
|
1
|
240
|
480*800
|
xhdpi
|
320
|
8
|
2
|
1
|
320
|
720*1280
|
xxhdpi
|
480
|
12
|
3
|
1
|
480
|
1080*1800
|