为什么要谈屏幕适配这个话题呢?
以前开发过程当中一直用的官方推荐的dip,偶尔看到过用dimens 文件适配的文章,后面也看到了一些建议dip就够了,dimens 文件适配有坑,自己没有尝试过,懒得折腾,平时开发的就几台测试机,有时在不同屏幕上适配看上去不怎么舒服,虽然大概知道是同样像素在不同尺寸下导致体验不一致导致的,但是一直懒得改,不知道多少人和我一样。。,直到...。
直到最近突然要开发一个TV项目,用dip 的方式在真机模拟器上差距实在太大,使用dimens 适配后,效果和设计图基本上差距不大了,但是还是没有深究,直到上个星期,被人家问到Android 屏幕如何适配?
1 项目中你是如何适配的?
因为不同屏幕不同尺寸像素的原因,导致宽高dip会有差异,所以官方的dip并不推荐,现在流行有 AutoLayout,dimens 适配,AutoLayout Issue 太多,作者好像也不再更新,我用的是约束布局加dimens。。。
复制代码
2 你所说的dimens 文件是怎么来的呢?
通过工具生成的。。
复制代码
3 你知道这个工具的原理吗?
...,
很诧异会问这个问题,看了掘金和一些博客才知道,这个月屏幕适配问题还挺火,对照着文章看了好几遍,有几个关键问题,用自己的话复述一下,加深自己的理解。
使用dip 导致适配时和UI设计师不一致的根本原因?
我看到是这样描述的
density 在每个设备上都是固定的,DPI / 160 = density,屏幕的总 px 宽度 / density = 屏幕的总 dp 宽度
设备 1,屏幕宽度为 1080px,480DPI,屏幕总 dp 宽度为 1080 / (480 / 160) = 360dp 设备 2,屏幕宽度为 1440,560DPI,屏幕总 dp 宽度为 1440 / (560 / 160) = 411dp
由以上可知,不同屏幕的总宽度dip值不一致,如果在不同屏幕当中用同样的dip 去做适配,得到的值也不一样,例如宽度 100dip 在 宽度为 360的dip上占0.278,在宽度为411dip的手机中为0.243,所以导致在不同屏幕上会有差异
头条适配原理
根据公式 dp * density = px ,而dp已经固定,通过修改density获得 px的值。
density 怎么来的呢?
最终结果应该是
假设 设计图 dip 为 uiDip 宽度px uPxWidth
设配dip 为 deviceDip 宽度为 dPxWidth
屏幕的 dPxwidth 和 deviceDip 已经固定 根据设备宽度px和设计图的dip 求得 density
density = devicePxWidth / uiWidthDip
根据公式求得设计图的dip宽度算在设备上的px宽度,最终得宽比和在实际图中宽度比一致