首页 > 代码库 > Android 适配说明

Android 适配说明

首先这篇适配说明是来自技术群分享,这里进行保存,以备不时之需!

 

只针对手机app适配

目前android 手机分辨率主流有

480*800  480*854  540*960

720*1280

1080*1920

1440*2560

 

以上不包括屏幕内虚拟机键。 一般540*960 加虚拟机 540*800多 720p的是1100多

 

首先适配光考虑分辨率是不够的, 还有考虑分辨率的dpi

 

android 手机主要朝两个方向发展,一个是手机型 一个是pad型的

 

先说dpi的不同,同样分辨率的手机 dpi不同

比如:1、 4.3寸 4.6寸720*1280的分辨率的手机 他们的dpi 是2 用的是xdpi的图

       2、 6.0寸 5.8寸720*1280的分辨率的手机 他们的dpi 是 1.5 用的是hdpi的图

 

这样就导致如果用多套图的话 第2套图的hpi 会跟正常的480*800  480*854  540*960

冲突,你可以再加一套图...但是这样图加下去是无止境的,而且多套图的话 貌似 540*960的手机 如果带虚拟键的话引用的图有可能有问题。 可以拿htc 540*960的带虚拟机的手机 的测试下 

 

所以关键适配在布局上做手脚。

 

布局上适配 其实也不难,

主流的

540*960

720*1280

1080*1920

这3个分辨率其实是成比例的,所以以dip为单位的话 适配一个其他3个都会适配了 前提是手机型的适配。

 

pad型的适配 其实就是把控件缩小了,或者你可以理解成 布局拉长了,相对的怎么理解都行。

控件缩小是这样理解的  图左

比如你 100dip*100dip的方的布局

在xdpi上面 显示的是 200px*200px

在 hpi上面 显示的则是 150px*150px

 

布局拉伸的理解

 

如图 比如你在4.3寸的手机上显示 宽占了2/3 但是在大屏上 可能占了1/2 感觉布局横向拉长了。

 

 

首先要理解了 pad型跟手机型的区别 剩下的就好说了

 

 

接下来就是 实际中布局的应用。

记着一点就是 布局的时候 想象着  布局被拉伸后显示的位置 

还有就是毋庸置疑的 布局的单位都是dip

 

 

举例1.  头部栏

 

这是两种 理解显示的样子, 左边的是 假设两个屏幕尺寸一样 分辨率一样 dpi不一样的时候显示, 右侧是 现实中显示出来的 样子

 

先看左侧的  比如导航栏高是100dip  那么左边第1个图高 就是200px,第2个图高就是150px 

 

这个是合理的  因为你看右边的图的 实际的展示 虽然高是150px 但是实际上他展示的区域跟 200px 展示的区域是差不多一样大的。

 

所以pad型的定义就是为了 展示更多的内容。 

 

后面就不花 两种图了 太累了,

 

所以头部栏的布局 就是高  dip固定值, 宽用fill, 如果宽不用fill 用固定值的话, 就会出现 比如 左1宽 360dip  刚好 720px 但是左2 360dpi只有 360*1.5<720p,

 

所以适配一般背景什么的 宽是fill 高是固定dip

 

 

 

然后看具体的控件 icon icon如右图  其实icon大小也是合理的,所以icon的大小也是dip的固定值, 关键是布局。

左边的是 左对齐 距左多少像素  右边的是右对齐 距右多少像素, 所以即使控件拉长了 也是对齐的,

如果当前右边的那个布局不是右对齐的话 就会出现 按钮右边多出了空白。

 

所以布局的时候 还是前面说的那句话 要考虑拉伸之后的位置,然后用距左 距右 或者权重

 

 

2.随屏幕拉长而拉长的布局 或者不变的布局

 

这个非常常见  比如

 

图 布局 1 2 3

布局1为正常要做的效果, 2 3为大屏手机显示,

如果1的布局 给每个item 布局的宽设了固定的值 屏幕是720px 就是360dip 比如 设置340dip 居中那天距左距右大概各留了10dip,

如果是让上面的写法 居中 宽340dip的话 运行到大屏就是第2个图的效果 明显不是我们想要的

 

如果是直接写 宽fill margin左右10dip的话 那就是 图3的效果

 

根据各自情况,首先要想到布局拉长后的样子!

 

 

 

3. 比较特殊的格子布局 或者瀑布流布局

 

比如一个方格的gridview 画的不太方=  = 那他适配后肯定也是方的。就那gridview来说吧

 

布局里面是不知道手机屏幕的宽高的,而且如果是用dpi为单位的话 那么宽就会变小的,有些人会用权重 weight,宽是可以。 但是高呢=  = 。。

像这种情况 只能通过代码 在adapter里面设置 计算屏幕的宽/列数 就是item的宽高的值。

 

特别是 这种 有的 肯定是代码里面计算的 布局肯定是做不到的。

那是那句 即时你适配了宽 但是高会缩。。

 

 

 

总结 就是布局的时候想象着  布局被拉伸后显示的位置 

还有就是  考虑虚拟键盘, 有些高度没虚拟键盘的 刚好一屏的 记得外面加scrollview滚动。。 不然适配后高度不够。

 

 

补:

至于用哪套图, 目前折中用的720p的图,因为要向下兼容,如果直接用1080p的图 低分辨率 内存不后, 然后用480 或540的图 1080p 或者后面的2k的显示可能会模糊,

折中的话 就用720*1280的图片。

后面2k 1080k普及的话 可能就不用720p的图的。用1080的图也有可能

Android 适配说明