Android设备屏幕的尺寸是各式各样的。如小米是4英寸的,Xoom平板是10英寸。分辨率也千奇百怪。800×480,960×540等。Android版本号的碎片化问题更是萦绕于心,只是在设计应用时能够分为两大块:3.0之前的版本号和3.0之后的版本号。这样的情况会带来什么问题我们用三个如果来说明一下。
1. 如果你的手上有两个4英寸的设备,设备A的分辨率是800×480。设备B的分辨率是1600×960。你在设备A上设计了一个64×64像素的图标,感觉它大小正合适。但放到设备B上的时候,这个图标看上去就仅仅有之前一半大小了。
2. 如果你手上的两个设备,设备A是4英寸。设备B是10英寸。在设备A上方放了一个tab控件。有三个页签。放到设备B上看时tab控件的三个页签被拉得非常长。本来放6个页签的空间仅仅放了三个页签。
3. 如果你手上的两个设备,设备A装的是Android2.3,设备B装的是Android4.0。而设备B没有menu建,风格也不一样。你发现两个设备上用同一套风格的皮肤并不合适。
Google提供了一套体系去解决这些问题。我们再回到上面的那张图,drawable目录有ldpi、mdpi、hdpi、xhdpi四种。dpi指像素/英寸,而ldpi指120。mdpi指160,hdpi指240。xhdpi指320。
小米手机是4英寸、854×480的分辨率,那么小米手机的dpi就是854的平方加480的平方和开2次方后除以4,结果大约是245。
如果应用安装在小米手机上,那么系统会调用图中drawable-hdpi里面的资源。
这样,你仅仅要做4套资源分别放在drawable-ldpi、drawable-mdpi、drawable-hdpi以及drawable-xdpi下(图标能够依照3:4:6:8的比例制作图片资源),那么就能够解决上面如果1其中提到的问题。
对于同样dpi、但尺寸不一样的设备。能够通过layout文件控制各种资源的布局。Google将设备分为small(2~3英寸)、normal(4英寸左右)、large(5~7英寸)、xlarge(7英寸以上)。在上面的如果2种,我们能够在layout-normal里配置3个页签的tab栏,在layout-xlarge里配置6个页签的tab栏。如果应用在全部设备上布局都一样,那么就不用考虑针对不同尺寸的layout。从图中那些layout*目录能够看出,该应用在hdpi及xhdpi上支持横竖屏,并且横竖屏的布局不一致,但没有考虑不同尺寸的设备使用不同布局的情况。
Android3.0之前的风格与Android3.0(包括3.0)之后的风格差别非常大。图中那个应用就使用了两种风格的资源及布局。Android2.3的小米会使用drawable-hdpi及layout-hdpi其中的文件,而Android4.0的小米就会使用drawable-hdpi-v11及layout-hdpi-v11里面的文件。