推荐阅读
https://mp.weixin.qq.com/s/d9QCoBP6kV9VSWvVldVVwA
一、名词
px = density * dp;
density = dpi/160;
像素密度:dpi =sqrt(宽的平方 + 高的平方)/屏幕尺寸;
屏幕尺寸:即对角线屏幕的大小,单位为英寸。
px = dp * (dpi / 160);

传统dp适配的缺点
dp在图片适配时还是存在局限性的。
比如:UI设计图是按照屏幕宽度360dp来设计的,那么在1920*1080上,屏幕宽度其实为1080/(440/160) =392.7dp,440是根据公式算出来的dpi。这种情况下,使用dp是无法在不同设备上显示为同样效果的。同时在设备屏幕宽度不足360dp时,会显示不全。
探索新的适配
1、支持以宽或高(不变动的)一个维度去适配,使该维度上和设计图纸一致。
2、突破口:px = dp * density;如果想要保证在所有的设备上算出的px都正好是屏幕的宽度。
那么适配后的density = 设备真实的宽(单位px)/360,把计算好的density在系统中修改一下。
字体大小修改:通过计算之前scaledDensity和density的比获得现在的scaledDensity
适配方法 dimens适配
1、需要选定一个屏幕分辨率基准值。
例如这里我们以1280x720的屏幕分辨率为基准那么values-1280x720文件夹下面的dimens.xml文件如下:

那么values-1920x1080文件夹下面的dimens.xml文件就应该是这样的:

2、生成dimens文件
(1)dimens生成器
生成器的使用:


注意:该生成器得到的dimens文件的单位是dp,我们需要的是px作为单位,只需要把saveDimens.xml文中的内容做一次查找替换就可以了。

(2)程序
参考:https://blog.csdn.net/lmj623565791/article/details/45460089