您的位置:首页 > 移动开发 > Android开发

android的适配

2015-11-30 22:55 579 查看
一,为什么要进行适配:

根据opensignal.com一家外国的统计网站统计。2014android的设备将近2万中。android的碎片化特别严重。

android的不同的设备有着不同的分辨率。

知道了为什么要适配,那么要对哪几种设备进行适配?我们可以根据友盟统计,现在主流的六种分辨率设备:

1280*720,,1920*1080,800*480,854*480,960*540。相信知道搞定了这六种不同分辨的设备,也就基本完

成了android的适配。

二,android适配中的重要概念:

1,屏幕尺寸,屏幕分辨率,屏幕像素密度(硬件属性)。

屏幕尺寸是指屏幕的对角线的长度。单位是英寸作为单位,1英寸=2.54厘米

屏幕分辨率是指横纵向上的像素点的个数。一般是纵向上的像素点个数*横向上的像素点的个数:1920*1080;

屏幕像素密度:dpi(dot per inch)Nexus5:屏幕尺寸:4.95inch;dpi = 445 = Math.sqrt(1920*1920 + 100*1080)/4.95。

2,dp,dip,sp,px。(计量单位的概念,以及他们之间的关系)。

px:像素,构成图片的最小单位

dp,dip(两者是同一个概念):密度无关像素。在像素密度160dpi的时候,1dp= 1px;那么以160dpi为基准时,

像素密度为240dpi时1dp = 240*1/160px=1.5px;

sp:即Scale-independent-pixels,根据文件大小首选项进行缩放,通常用于限定文件的大小,google推荐使用

12sp以上的文字显示,从小到大推荐使用12sp,14sp,18sp,22sp。不推荐使用小数,或奇数因为会造成精度的丢失。

3,mdpi,hdpi,xdpi,xxdpi,xxxdpi的区分。

名称 像素密度范围

mdpi 120dpi - 160dpi

hdpi 160dpi - 240dpi

xdpi 240dpi - 320dpi

xxdpi 320dpi - 480dpi

xxxdpi 480dpi - 640dpi

在设计图片要按照2:3:4:6:8的比例给出五种不同的图。之前还会有ldpi,现在因为太少,现在系统会根据hdpi图片的1/2给出。

三,屏幕适配的方案:

1,支持各种屏幕尺寸。

使用wrap_content,math_parent,weight等属性定义布局。

wrap_content包裹内容,math_parent填充父类布局。weight在LinearLayout中设定控件所占剩余空间的比重。

使用相对布局,静止使用绝对布局。

使用限定符:

large与sw600dp

large:当屏幕宽度大到一定程度的时候,我们可以使用另一套布局。

例如res/layout/main.xml 和res/layout-large/main.xml 这个时候当屏幕的大小超过7inch的时候,应用会自动调用res/layout-large/main.xml布局。

(这个是Android3.2之前有效的方法)。

sw600dp:在Android3.2之后google推出了最小宽度限定符。那为了Android3.2之后的设备依然能够实现上面的机制,我们还需再定义一个布局。

res/layout-sw600dp/main.xml。

布局别名

为了减少上面的工作,我们可以采用布局别名的方法。首先我们把上面的三个布局变为两个布局:res/layout/main.xml res/layout/main_large.xml

然后我们分别在res/values/layout.xml、res/values-large/layout.xml、res/values-sw600dp/layout.xml中为相同的别名指定不同的布局例如:

res/values/layout.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="main" type="layout">@layout/main</item>
</resources>
res/values-large/layout.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="main" type="layout">@layout/main_large</item>
</resources>
res/values-sw600dp/layout.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="main" type="layout">@layout/main_large</item>
</resources>
如此我们在修改大屏幕布局时就不用修改两份了,因为不管是Android3.2之前或之后,都是指向同一个布局。

使用屏幕方向限定符

res/layout-sw600dp-land/layouts.xml

res/layout-sw600dp-port/layouts.xml

使用方法同上。

使用自动拉伸位图:

即使用.9图片,.9图片的四个边通常有四条线,左上定义的是图片的拉升区间,右下定义的是图片的间隔,相当于padding属性。

2,支持各种屏幕密度。

使用非密度制约像素:

即上面我们讲解概念时提到的dp和sp。高宽推荐使用dp,文本大小推荐使用sp。

使用dp能够使得控件在不同的像素密度不同的设备上得到很好的适配,但是因为手机的屏幕宽度他们的dp总数比不是一致的。所以即使

使用dp也会有误差。

有一种解决上面的方法。就是我们不适用dp单位,而是根据我们自己的想法来设置一种新的特殊的单位。

把所有不同分辨率的设备分成480分*320分。在values-480x320/lay_x.xml文件中

<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="x1">1px</dimen>
<dimen name="x2">2px</dimen>
......
</resources>
在values-800x480/lay_x.xml文件中

<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="x1">1.25px</dimen>
<dimen name="x2">2.5px</dimen>
......
</resources>
具体请参考大神讲解:洪洋讲解屏幕适配方案,但是这样做法也很明显,工作量太大。

提供备用位图:

在前面讲解mdpi,hdpi,xdpi,xxdpi,xxxdpi的时候就提到过,我们针对这几种不同范围的像素密度

按照2:3:4:6:8的大小提供五种不同的图标。如果只放一张图片的话,系统会按照上面比例对图片进行缩放,造成内存泄露。

3.,实施自适应用户界面流程。

这部分是对上面方法的应用,给出的一些具体的流程:

确定当前布局,我们可以根据不同布局的差异性,来设置一个标示符。

根据当前布局做出响应,这一点也可以通过标示符来实现。

重复使用其他活动中的片段。

处理屏幕适配变化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: