Android屏幕尺寸适配总结

随笔7个月前发布 柠九
81 0 0

摘要: 对使用市面上的适配方案进行总结,并分析大致原理

基本概念了解

1dp 等于 1/160 英寸(in)

Dp用于解决同尺寸下不同分辨率的显示问题,不同尺寸无法解决

常用模拟器的设计稿尺寸:

屏幕dp宽度:375dp-788dp
屏幕尺寸:5.6in
分辨率:1125 x 2436

屏幕适配的方案

适配方案一:通过修改density(或者xdpi)进行适配

存在的问题:原理需要根据设计稿的基础尺寸,进行百分比适配,设计稿View宽度/设计稿总宽度

dp最终转成px进行显示,假设View宽度是100dp,由于100dp是写死的

假设设计稿宽度是400dp,那么100dp宽度的View,占据屏幕的1/4

如果其他三方库的设计稿宽度是300dp,那么100dp宽度View,占据屏幕1/3

三方控件的View的设计稿与app设计稿不一致,会出现问题

解决方案

1.每个Activity,Fragment灵活配置density

成熟的开源框架(感谢): AndroidAutoSize AndroidUtilCode

AndroidAutoSize

项目地址:AndroidAutoSize

参考文档:AndroidAutoSize

AndroidAutoSize原理分析:

  1. 通过ContentProvdier进行框架的自启动,需要注意框架中有默认的x,w
  2. 对使用ActivityLifeCycleCallback 对每个Activity进行处理
  3. 核心原理:density = 屏幕宽度px/设计稿宽度dp ,而根据公式 PX = density * DP
    PX = 屏幕宽度px * (DP/设计稿宽度dp)

使用的还是dp单位,对于不需要适配的界面,再进行还原

Blankj 的pt适配方案(个人暂时不会使用)

AndroidUtilCode

使用的是单位pt,只是借用了pt的公式,跟pt本身并无关系

以横轴为例,xdpi是横轴每英寸像素点个数

  1. 核心原理利用PT公式 PX = (xdpi * value) / 72
  2. 对每英寸像素点进行重新赋值 xdpi = (屏幕总像素 / 设计稿总的宽度) * 72
  3. 代入公式,控件View的宽度 = (屏幕总像素 / 设计稿总的宽度) * value

本质上还是百分比换算,对于旧的项目有很好的支持,无需调整,新项目能直接用
个人觉得,因为只是借用了pt的公式,设置View的尺寸,view的尺寸跟pt这个概念没什么关系,后续维护起来会出现概念问题,因为使用大量的pt单位,如果放弃此方法,还是会需要大量修改单位,高度耦合,使用慎重

smallest width 限定符适配方案(使用简单,较为完善)

通过资源限定符号,进行适配,分辨率适配升级版,拓宽了使用范围

在res 建立 values-sw360dp文件夹

系统才有的是向下兼容方式: 手机屏幕400dp,但代码中只有sw380dp,跟sw410dp文件夹,手机不会选择就近,而是选择sw380dp文件,如果没有sw380dp,就会选择默认values中的尺寸

缺点:

  1. 会生成多个sw文件夹,对于没有完全对应的尺寸,会有相对误差
  2. 布局中的尺寸,都需要引入dimens中数据,没有数据就无法使用,侵入性强

修改其他适配方案,只需要保留默认的dimens文件,删除其他文件即可,没有迁移成本

使用简单,一键生成,Plugins 插件库中,搜索ScreenMatch,一键生成

通过分辨率去适配(弃用)

来自2015年的适配方案,屏幕会选择对应的分辨率,通过转成对应的px像素点,原理是百分比

Android 屏幕适配方案_android 适配-CSDN博客-鸿洋(弃用)

总结:推荐使用AndroidAutoSize(入侵小,改动小) 或者 smallestWidth(稳定!)

参考文档:

AndroidAutoSize博客

字节开源原理density

Android 屏幕适配终结者 | Blankj’s Blog

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...