基本概念:
1、px
像素单位,构成图片的最小单位,1px相当于屏幕的一个物理像素点。
2、分辨率
屏幕的宽度上的像素点 * 高度上的像素点,例如1280*720。
可以通过命名 vm size 获取分辨率信息
wm size
Physical size: 1280x480
3、屏幕尺寸
指的是屏幕对角线的长度,单位是英寸。1英寸=2.54厘米。
4、dpi
屏幕像素密度,指的是每英寸上面的像素点个数,dpi越高,屏幕呈现的画质就越清晰。
可以通过adb命名 getprop 获取dpi的大小。
cd system
/system # getprop | grep sf
[ro.sf.lcd_density]: [160]
根据dpi的不同,可以区分出drawable文件:
- mdpi 120dpi ~ 160dpi
- hdpi 160dpi ~ 240dpi
- xhdpi 240dpi ~ 320dpi
- xxhdpi 320dpi ~ 480dpi
- xxxdpi 480dpi ~ 640dpi
5、dp
dp也就dip,即Density-independent pixel (dp)独立像素密度,这是谷歌为了方便开发人员适配而做的一个单位。谷歌规定,当dpi为160的时候,1dp = 1px。例如一张160dp160dp的控件,在160dpi的屏幕上,它占用的像素点也是160px * 160px,也就是1英寸 * 1英寸;如果这个控件是在320dpi的屏幕上,1dp = 2px,它占用的像素点就是320px320px,但还是1英寸*1英寸。
如果这两种设备的尺寸都是10.4寸(车机是经常有这种尺寸的),那么就可以完美适配尺寸,不用修改控件的大小;但是如果这两个设备的尺寸差距较大,那么就会出现小尺寸的控件放在大尺寸的的设备上,会留空白,大尺寸的控件放在小尺寸上会显示不全。
适配方案:
车机的屏幕尺寸很多,而且跟手机的尺寸不一样,比如有1920720 12.3寸、1920720 8.8寸、1280720 10.4寸、1280480 8.8寸、800*480 7寸等等。
我们通常需要分别给它们建立资源文件,以便准确地对应图片和尺寸:
如果遇到某些项目,不同的尺寸,UI布局也会有小改动的话,可以如下适配:
资源文件的命令规则如下:
values-mcc310(sim卡运营商)-en(语言)-sw320dp(屏幕最小宽度)-w720dp(屏幕最佳宽度)-h720dp(屏幕最佳高度)-large(屏幕尺寸)-long(屏幕长短边模式)-port(当前屏幕横竖屏显示模式)-car(dock模式)-night(白天或夜晚)-mdpi(屏幕最佳dpi)-notouch(触摸屏模类型)-keysexposed(键盘类型)-nokey(硬按键类型)-navexposed(方向键是否可用)-nonav(方向键类型)-v7(android版本)
需要注意的是:
对于指定分辨率的属性(例如:values-hdpi-1024x600,values-hdpi-960x540,values-mdpi-1024x600),指定分辨率属性并没出现在官网的匹配属性集里,也没找到对于分辨率属性的详细说明,有时候我们会发现这个命名在某些机型上存在适配不成功,我们可能就需要换一种适配命名了。
当然,如果有一些特殊的情况,我们就可以特殊地适配了:
1、屏幕尺寸相同,像素密度不同
这种情况尺寸用dp较为合适,且适配的时候,不需要再建立其他尺寸的资源文件,只需要区分不同dpi的图片即可。
2、分辨率相同,屏幕尺寸不同
比如都是1280*720的分辨率,一个是10.4寸的,一个是8.8寸的。这个时候,尺寸的单位使用px比较合适,这个时候图片和资源文件都不用再区分了,因为图片也是针对于像素点,px也是像素点,相当于把等比例缩小或者放大。