头条适配是根据设计图宽度,算出density(可以理解为密度),继而算出dpi,替换系统中的dpi.则XML即可按照UI所给设计图设置宽度.达到适配目的.
直接在Application的onCreate方法中调用

这个地方我们需要注意 “ 375f ” 这个参数,375这个值是一个UI图的参照值,单位是dp,我参照的是1334*750像素的图。

因为我们UI使用的是蓝湖的UI设计,可以根据这些不同的DPI来切换显示不同布局的不同宽度dp值
然后我们继续看那个参数值375,因为我参照的是XHDPI的图进行绘制的,2px=1dp,375这个值就是宽度的像素750px/2px=375dp
然后我们切换到XHDPI进行看看是不是375dp
那么,我们就可以参照上面这个图给出的UI进行设置了,我这个地方给了个测试例子,375dp的话,要想能看出是否精准适配的话,我们可以这样,采用LineaLayout的vertical布局,靠左边设置一个宽度为200dp宽度的widget,靠右设置一个175dp宽度的widget,如果他们两个相交的地方刚好撘上,那么,这就是一个精准的适配
有的UI给出的并不是像我们这种dp方式的,有的UI给的单位是px,其实,这也是很好解决的,比如UI给的是1080*1920的图,那我们就按照XHDPI 2px=1dp的方式来适配,那么,我们设置setDensity的值就为1080/2=540dp,然后UI凡是标注多少px,我们就在布局中给这个px除以2,然后设置到布局上即可。
我们看上面的换算表格MDPI 1px=1dp,既然1px=1dp,那么我们怎么不直接给setDensity设置750呢,这样,我还省去了计算,直接参照MDPI的图来做,好,我们就这么来一次,给大家看看效果,最后再来说原因。
确实能宽度适配,但大家看看,这个字体和页面明显有缩小的感觉,这种适配虽然宽度达到了,但明显不是我们想要的,那是什么原因导致的呢?这时候,我们就要引出一个关键因素像素密度dpi,我来列出两个公式

这个计算公式是系统通过我们给定xml的值来计算出显示在屏幕上的布局,附录的代码就是利用的这个公式给系统设置计算参数,然后我们把刚刚MDPI适配的方式计算一下dpi
160这个密度值明显过低,导致1密度下面占据太多的像素,界面看起来很拥挤,然后我们看下XHDPI的值,750的px等于375dp
dpi的值是系统给的,大概查阅了流行的机子的dpi,就是我上面列举的范围内,在我们知道像素宽度的时候,尽量参考Xhdpi来做,这也是我们在适配图片的时候,喜欢参照xhdpi的原因