android开发:今日头条屏幕适配方案

手机屏幕的各个单位:
手机像素(px):元素的基本单位,手机像素越高显示的图像更清晰
屏幕像素密度(dpi):屏幕的像素密度
density: px与dp的转换率 density =像素密度(dpi)/160
手机尺寸:手机屏幕对角线的宽度
dp:dp值由px和density 转换而来

假设手机屏幕分辨率为:1920*1080,屏幕尺寸为5: 我们可以通过勾股定理计算得到对角线的像素为2203px
那么像素密度(dpi)为2203/5=440: 通过像素密度可以计算出dppx的转换率(density)值等于:440/160=2.75

通过density我们就可以算出我们屏幕宽度等于多少个dp值:
设备 1:屏幕宽度为 1080px,480DPI,总 dp 宽度:1080 / (480 / 160) = 360dp
设备 2:屏幕宽度为 1440,560DPI,总 dp 宽度: 1440 /(560 / 160) = 411dp
我们可以看到 ,不同的设备计算出的屏幕宽度的dp值是不一样的,它由density值决定。 如果你在布局文件中设置了一个宽度为100dpButton,系统会根据将density 值将dp转化成px,你会发现这个Button占了第一个设备屏幕宽度的27.8%,占了第二个设备屏幕宽度的 24.3%。因此就需要我们进行屏幕适配了。

我们知道dp值是我们描述px的一个单位而已, 最终都会被转化成px显示在设备上,每个设备的宽度dp值都不同。而我们填写单位的时候都是 dp 值,这个dp值是定死的,这就导致我们的view显示在不同屏幕上的占比不同。
而设备的总dp值是我们根据density计算出来的一个描述px的单位。假设如果我们每个设备的屏幕总 dp 宽度不变。我们就可以堆导出如下公式。
(dp)/ (总dp) = (px) / (总px)
通过推导:
(px)/ (dp) = (总px) / (总dp) = density
我们只需要规定所有设备总的dp值都是一样的,再通过上面的公式计算出density,然后修改系统的density值。当我们的view放在任何的屏幕上占比都是一样的。

针对上面俩个不同的设备进行验证: 假设我们设定设备屏幕宽度为 375 dp
第一个设备的density=1080/375=2.88,我们的Button转换成px=100*2.88=288 占比度:288/1080=26.6%
第二个设备的density=1440/375=3.84,我们的Button转换成px=100*3.84=384占比度:384/1440=26.6%

Android 屏幕适配之框架(AndroidAutoSize)(今日头条)适配

你可能感兴趣的