屏幕适配方案小结

前言

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

<manifest>
    <application>            
        <meta-data
            android:name="design_width_in_dp"
            android:value="360"/>
        <meta-data        
            android:name="design_height_in_dp"
            android:value="640"/>           
     </application>
</manifest>

特殊页面设计图尺寸不同时可以实现 CustomAdapt 接口

某个页面不需要适配时可以实现CancelAdapt 接口

总结

总之,在android设备严重碎片化的今天,没有什么方案是完美的,只有最合适的,相信未来还会有更多优秀的适配方案。革命尚未成功,我等还需努力!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值