前言
Android的屏幕适配网上有很多种方法,我觉得使用smallestWidth(最小宽度) 限定符来进行适配是相对简单一点的,并且所需的dimens文件也不会特别多,这里我是参考了这篇博客
smallestWidth限定符原理
smallestWidth 限定符适配原理与屏幕分辨率限定符适配原理一样,系统都是根据限定符去寻找对应的 dimens.xml 文件。例如程序运行在最小宽度为 360dp 的设备上,系统会自动找到对应的 values-sw360dp 文件夹下的 dimens.xml 文件。区别就在于屏幕分辨率限定符适配是拿 px 值等比例缩放,而 smallestWidth 限定符适配是拿 dp 值来等比缩放而已。需要注意的是“最小宽度”是不区分方向的,即无论是宽度还是高度,哪一边小就认为哪一边是“最小宽度”。
smallestWidth限定符的好处
1、屏幕分辨率限定符适配是根据屏幕分辨率的,Android 设备分辨率一大堆,而且还要考虑虚拟键盘,这样就需要大量的 dimens.xml 文件。因为无论手机屏幕的像素多少,密度多少,90% 的手机的最小宽度都为 360dp,所以采用smallestWidth 限定符适配只需要少量 dimens.xml 文件即可。
2、屏幕分辨率限定符适配采用的是 px 单位,而 smallestWidth 限定符适配采用的单位是 dp 和 sp,可以对字体也进行适配。
3、屏幕分辨率限定符适配需要设备分辨率与 values-xx 文件夹完全匹配才能达到适配,而 smallestWidth 限定符适配寻找 dimens.xml 文件的原理是从大往小找,例如设备的最小宽度为 360dp,就会先去找 values-360dp,发现没有则会向下找 values-320dp,如果还是没有才找默认的 values 下的 demens.xml 文件,所以即使没有完全匹配也能达到不错的适配效果。
smallestWidth限定符的使用
1、在 Android Studio 中安装 ScreenMatch 插件
通过File -> Settings -> Plugins -> browse repositories搜索ScreenMatch插件并且安装,安装后重启Android Studio
2、在项目的res/values中需要有dimens.xml文件
这里可以有别人的dimens文件源码
可以直接复制,并且可以在这个基础上进行修改
3、生成其他尺寸的dimens.xml
插件安装好后,在项目的任意目录或文件上右键,选择 ScreenMatch 选项
它会以res/values/dimens.xml 文件作为基准进行生成,执行成功之后res目录下会自动生成一堆dimens文件
4、根据设计图填写最小宽度基准值,并且填写需要适配的最小宽度dp
插件默认的最小宽度基准值为 360dp,适配的设备最小宽度为320,360,384,392.7272,400,410,411.4285,432,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365(包含了平板和 TV )生成的文件,但实际情况要根据设计图和需求设置。
我们需要对该文件进行修改
打开配置文件,修改下图中 1、3、4 的值即可。(图中单位均为 dp)
1、最小宽度基准值,填写设计图的最小宽度值即可。(默认为360dp)
2、插件默认适配的最小宽度值,即默认情况下会生成如下值的 dimens.xml 文件。
3、需要适配的最小宽度值(如果是小数,则保留4位小数),即你想生成哪些 dimens.xml 文件。(不填就是按照步骤2中的宽度值)
4、忽略不需要适配的最小宽度值,即忽略掉插件默认生成的 dimens.xml 文件。
配置文件修改完成后,重新执行第 3 步,生成新的 dimens.xml 文件。
5、在xml中使用
原本的100dp则改为@dimen/dp_100(具体看res/values/dimens.xml文件,适配以该文件为基准,正常选择的模拟器也是360dp,即780*1280px)