前言
首先说明,我仍然采用的是dimens适配。但是dimens适配很早就出现了,我为什么又要说是最新的呢?我的意思是可以适配到最新的手机。
仍然不清楚px、density、dpi、dp之间关系的小伙伴可以看我另外一篇文章,讲得也很易懂~
老dimens适配方案的问题:
以前我们创建values文件夹的时候有一下两种创建形式:
![](https://img.haomeiwen.com/i11546496/c83fe7ba32e672f9.png)
![](https://img.haomeiwen.com/i11546496/ee90ae3eb1b876ce.png)
其实这两种创建方式得到的结果是一样的。但是,问题来了!
现在有的手机分辨率不是谷歌官方支持的分辨率了,例如:红米note5 1080*2160,它的density变成了2.75,不再是1080px的3.0了。那么它对应的dpi就是440dpi,按照规则,就会采用
values-320dpi
目录下的dimens文件。你可能会觉得创建一个尾缀440dpi的文件夹不就可以了吗?答案是不可以,因为谷歌不支持,它会告诉你目录名不符合规范。
解决办法:
创建以w宽度尾缀的dimens文件,像下面这样:
![](https://img.haomeiwen.com/i11546496/40811667d9e3dc8f.png)
图中
values-w360
就是屏幕宽度在360dp以上的手机从这个文件夹中取值(当然是360dp ~ 390dp,因为390dp ~又是另外一个文件夹)。还是来个例子直接:我有三部手机,宽720p、density2.0=宽360dp的手机1,宽1080p、density2.75=宽392dp的手机2,宽1080p、density3.0=宽360dp的手机3。那么在给view设置宽100dp的时候,显然view在手机2的屏幕占比要大于手机1和手机3,这就不对了。所以我像上图所示建立了两个values文件夹,
![](https://img.haomeiwen.com/i11546496/7b8472931b0283fd.png)
![](https://img.haomeiwen.com/i11546496/91d107fd496006f8.png)
这样在系统取值的时候,就根据你手机的dp宽度来找到适合你手机使用的dp值,以此达到了屏幕适配的效果(即相同view在不同手机中占比一致,这里是宽度占比一致)。
最后
dimens目录可以有多种,最方便的办法就是建立一个主函数类来自动生成dimens文件。这个方法就不贴代码啦,因为生成dimens文件我也是看的别人的博客,稍微百度下就来了~
网友评论