请参考Android 系统版本、屏幕尺寸和OpenGL版本分布情况概述http://developer.android.com/about/dashboards/index.html。注意:此数据不包含中国大陆地区。
Android屏幕的碎片化是开发者比较头疼的问题之一,本文将简要说明几种适配不同尺寸屏幕的方法。
首先介绍Android的布局、像素和资源文件夹的一些概念。
Android中的布局方式分为FrameLayout(帧布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。
各自特点如下:
RelativeLayout:可以指明子控件相对于父控件的位置,也可以指明两个子控件之间的相对位置,布局范围在屏幕大小之内。
LinearLayout:按垂直或水平方向依次放置子控件,布局范围可以超过屏幕,可以设置子空间之间的比重(如果LinearLayout在该方向上是wrap_content的,实际大小和比重成正比;如果是match_parent或fill_content的,实际大小和比重成反比)。
FrameLayout:所有子控件一次叠加在左上角,布局不能超过屏幕范围。
TableLayout:以行和列的形式组织其子控件,不常用。
AbsoluteLayout:使用像素值指定子控件显示的位置,不推荐。
Android设备分辨率不同,目前有LDPI(120dpi), MDPI(160dpi), HDPI(240dpi), XHDPI(320dpi), XXHDPI(480dpi) 和 XXXHDPI(640dpi), 这些种设备。Android工程目录的res文件夹可以为不同分辨率的屏幕创建各自的资源文件夹。当app被安装到不同分辨率的设备上时,Android系统会根据设备的实际尺寸选择相应的资源文件加载。这种方式大家都不喜欢,但是作为最后的必杀技还是可以使用的。
下面就具体谈谈怎么为不同分辨的设备合理布局。
第一条:选择恰当的布局方式
我们首先会把AbsoluteLayout排除在外,因为它只能为特定尺寸布局恰当,换个尺寸就要多写个布局文件,显然大家都不愿意这么做。
多用RelativeLayout和LinearLayout,相对布局可以指定子控件之间的相对位置、间距,线性布局可以指定子空间的分配比例,这些可以在很大程度上摆脱对屏幕尺寸的依赖。这种方式需要多多运用。
第二条:为不同分辨率的屏幕提供相应的布局文件和资源文件,这个就不说了。
第三条:适当过滤支持的分辨率。工程的配置文件可以设定可以支持的分辨率设备,不在此列的设备将不能安装该app,这是对性能和体验的一种消极保护。