Android屏幕尺寸适配总结

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

基本概念了解

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 背景 之前基于头条的适配方案写了篇文章 Android 屏幕适配从未如斯简单,但后续发现还是有挺多坑的,这些坑都记...
    Blankj阅读 17,766评论 26 291
  • 概述 Android系统发布十多年以来,关于Android的UI的适配一直是开发中一个很重要的环节,也是一个很棘手...
    31ff81849aa8阅读 45评论 0 0
  • 1. 基本概念 android中dp在渲染之前会将dp转为px,计算公式: dp(dip):Density ind...
    BlueSocks阅读 581评论 0 7
  • ps:19 年第一篇,新年开头新气象,祝愿大家新的一年有好心情,好工作,事业顺利,感情稳健,身体健康,大吉大利~ ...
    前行的乌龟阅读 673评论 0 10
  • 1. 基本概念 android中dp在渲染之前会将dp转为px,计算公式: dp(dip):Density ind...
    蜗牛是不是牛阅读 585评论 0 0