浅谈android如何同时适配pad和手机
前期的注意事项和技巧
前段时间公司要做的一个android app,同时要做到适配pad跟手机。刚开始觉得这根本不可能实现,因为我们市场上见到的app都是要两个版本的,分别是手机版和pad版。因为手机和屏幕的尺寸相差太大,所以一般都不会说一个app同时兼容两个版本。
为了做到屏幕的兼容,所以我专门去网上查找资料,看看目前市场上主流的手机尺寸和分辨率分别是多少。主要找到的情况如下图所示:
而pad的话每个厂家出产的pad的分辨率都会跟手机的一样,所以可以先做完手机页面的适配再考虑pad的页面适配。
考察了目前主流手机屏幕分辨率和尺寸的分布之后,就得考虑android适配中另外一个重点,就是屏幕的ppi值,所谓的屏幕的ppi值就是:Pixels Per Inch所表示的是每英寸所拥有的像素(Pixel)数目。而android系统默认会根据获取屏幕的分辨率而将屏幕划分为idpi、mdpi、hdpi、xhdpi、xxhdpi这五个等级,每个等级都对应相应的ppi值,其对应关系如下图所示:
美工一般都会出一套切图(切图建议分辨率是480x800,这样网上做页面适配的兼容容易很多,px和dp的换算倍率刚好也是1:1)和尺寸图(反正我遇到的美工没有每种分辨率来一套,这样工作量确实大),而讲到尺寸图,美工在上面标的尺寸一般都是以px为单位的,而在android布局当中我们经常用到的单位是dp和sp。这样我们就得对px和dp进行换算,具体换算规则可以看这里: px和dp的换算规则。
编码中的注意事项和技巧
上面说了一些页面适配的一些前期的准备和注意事项,接下来就说一下编码中的一些页面适配的注意事项和技巧。1、在xml布局当中,尽量用weight值来均衡分布,尽量少用固定值去定义容器或者控件的大小。容器建议用fill_parent这类的值。如果控件或容器实在没办法得使用固定值,那就用固定值。一般手机都不会走样。如果出现走样,那就得在 values 、values-ldpi、values-mdpi、values-hdpi、values-xhdpi,根据不同屏幕分辨率对应然后在文件夹的diamen的文件里面定义一个变量然后在布局文件里面引用,如图:
这样子就可以对不同分辨率的屏幕做适配了。
兼容了手机后对pad的适配
由于手机切图会相对较小,如果pad引用的话就会失真。所以就得找另外一份pad版的切图和尺寸图。现在就有两套切图,经过试验发现,android系统是根据屏幕最小宽度来区分手机还是pad的,当屏幕最小宽度>=600px的时候就当做该设备为pad,当屏幕最小宽度 < 600px的时候就认为是手机。所以可以在定义两种类型的drawable文件夹,一个是drawable-sw600dp-hdpi(这个是用来放pad版的切图),另一个是drawable-xhdpi(这个是用来放手机版的切图)。而value文件夹也是类似,values-sw600dp(这是放pad版的diamen等文件)values(这是放手机版的diamen等文件)。
如果你不知道自己的手机的最小屏幕宽度可以用下面这段代码运行在自己手机上查看:
<pre name="code" class="java"><span style="font-size:18px;"> Configuration config = getResources().getConfiguration(); int smallestScreenWidth = config.smallestScreenWidthDp;</span>
<span style="font-size:18px;"> </span>有时候,有些布局只是有某些分辨率有一点点偏差,就可以在代码中获取屏幕最小宽度然后进行微调。