屏幕适配方案小结

前言

屏幕适配是一项简单又不可小觑的工作,而且从一个项目新起就应该制定好完整的适配方案,不然后续的窟窿真不是一般的大。个人有惨痛经历,之前接手一个满目疮痍的项目(外包项目害死人),到处是坑,其中在改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即可

AndroidAutoSize

参考: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设备严重碎片化的今天,没有什么方案是完美的,只有最合适的,相信未来还会有更多优秀的适配方案。革命尚未成功,我等还需努力!

你可能感兴趣的:(知识梳理)