屏幕适配是一项简单又不可小觑的工作,而且从一个项目新起就应该制定好完整的适配方案,不然后续的窟窿真不是一般的大。个人有惨痛经历,之前接手一个满目疮痍的项目(外包项目害死人),到处是坑,其中在改bug阶段,提了个这么个问题,说是有个页面和ios比特别丑,让改,当初原有基本没有做屏幕适配,非常简单根据dpi分了下那种,于是乎导致,改了这个页面,许许多多丑的页面都找出来了,pm高度重视,问要不都给改了重做一套屏幕适配,粗略一估计100多个页面,这不扯淡么....当然,最后也只是折中改了好多明显的....这个故事让我从此以后再也不敢小看屏幕适配工作,一定要在搭建的时候搞出一套最适的,不然真是后患无穷。
目前来看,就我所知大约有三种适配方式比较好用,分别是谷歌的百分比库、鸿洋的百分比适配方案、JessYan的AndroidAutoSize,其他的也没用过暂且不提了。
使用场景如下:
1.谷歌的百分比库:自己写demo练手
再也不用纠结分多少dp之类的,直接百分比分屏幕,demo写的又快又美
2.鸿洋的百分比适配方案
适用于严苛UI以及明确适配机型的项目,缺点:未覆盖的分辨率机型适配不好
3.JessYan的AndroidAutoSize
适用于大部分项目,缺点:没有上面的精准因为只根据宽或者高适配
依赖
compile 'com.android.support:percent:22.2.0'
原理
onMeasue中重新计算child的尺寸,遍历所有的孩子,通过百分比的属性重新设置其宽度和高度
使用
使用PercentRelativeLayout、PercentFrameLayout替换FrameLayout、RelativeLayout即可
控件增加属性:
app:layout_heightPercent="20%"
app:layout_widthPercent="30%"
参考:https://blog.csdn.net/lmj623565791/article/details/45460089
脚本下载:https://github.com/hongyangAndroid/Android_Blog_Demos/tree/master/blogcodes/src/main/java/com/zhy/blogcodes/genvalues
原理
以某一分辨率为基准,在values文件下生成所有分辨率对应像素数列表
根据UI设计师给出设计图上的尺寸,找到对应像素数的单位,然后设置给控件即可
使用
如设计图以750*1334提供,将x等分750份,y等分1334份,每一份根据不同分辨率计算得出实际对应px
使用时设计图显示多少,如一个btn宽200px,则layout中设置宽为x200即可
参考:https://www.jianshu.com/p/55e0fca23b4f?utm_source=oschina-app
依赖
implementation 'me.jessyan:autosize:1.1.0'
原理
当前设备屏幕总宽度(单位为像素)/ 设计图总宽度(单位为 dp) = density
计算出density(1 dp 占当前设备多少像素) ,根据不同设备的density实际设置不同px
使用
manifest中添加meta-data,将设计图标准尺寸录入,单位dp;然后layout中填入设计图显示的dp
特殊页面设计图尺寸不同时可以实现 CustomAdapt 接口
某个页面不需要适配时可以实现CancelAdapt 接口
总之,在android设备严重碎片化的今天,没有什么方案是完美的,只有最合适的,相信未来还会有更多优秀的适配方案。革命尚未成功,我等还需努力!