屏幕适配插件:ScreenMatch基本使用和pad中注意事项

1背景

因为Android开源,屏幕碎片化最严重的,所以app就避免不了进行各种机型适配的。screenmatch插件提供了一套解决方案。

2screenmatch配置

2.1screenmatch安装

打开Android studio Setting/plugin,选择marketplace 在搜索框中输入screenmatch,在搜素结果中直接单击安装,等待成功即可(我是安装了几次才成功,要是有梯子打开它试试)。
屏幕适配插件:ScreenMatch基本使用和pad中注意事项_第1张图片

2.2生成配置文件

右击项目找到screenmatch,如下图:
屏幕适配插件:ScreenMatch基本使用和pad中注意事项_第2张图片
单击之后,会有选择项目的界面,选择你想在哪个项目中使用screenmatch。
屏幕适配插件:ScreenMatch基本使用和pad中注意事项_第3张图片

会生成两个文件:screenMatch.propertiesscreenMatch_example_dimens.xml和很多values-××××文件。
在这里插入图片描述

这时会在res文件夹下看到很多values:
屏幕适配插件:ScreenMatch基本使用和pad中注意事项_第4张图片
这是点完screenmatch之后生成的文件

2.3几个配置文件简介

上面生成了screenMatch.propertiesscreenMatch_example_dimens.xml与res下面的values之间的关系呢。让我们看看具体的配置文件。

2.3.1screenMatch.properties文件

在这个文件中你需要关注就两个参数
base_dp和match_dp

插件的作者建议base_dp不要修改,个人感觉修改时你需要考虑如下问题:

  • 1.若base_dp=360这种机型在你项目中就不可能有,你完全可以根据你项目中的基础机型来配置这个基础base_dp。假如你项目最差也是640,为啥你还要在项目中生成360的呢。

  • 2.match_dp 若是不配置,插件会默认的给你设置一些默认的值,若是你不需要那么多,你可以把刚才生成的删掉,重新配置match_dp,重新生成values。

#System default values is 系统默认的值
384,392,400,410,411,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365

其实很多项目组,用不到这么多的值,只需要把你需要值配置进去即可。这样做的目的是为了减少apk的体积。即使以后想扩展的话,只需要在match_dp参数添加对应的值,并重新点一次screenmatch按钮就可完整配置。

  • 3.如何计算每个手机或者平板的对应的match_dp呢?
    计算方法:width/density
    在pad计算时要特别注意,因为pad有横屏和竖屏之分。因为screenmatch是根据宽度进行计算的,在横屏和竖屏时,adb获取的像素格式为宽度*高度,改变方向,值的位置是变化的

横屏:1280640
竖屏:640
1280

什么意思呢?同一个设备,分辨率为1280*640,横屏下高度为640,竖屏则是1280,这是你match_dp就是两个完全不同的值。加入density为2,match_dp 分辨为320和640。

2.3.2 screenMatch_example_dimens.xml文件

这个文件相当重要,也不重要,为啥呢?

先了解一下,screenmatch适配的原理,它将所有可能宽度都生成好,我只需要使用这些已经生成好的数值就行了,在不同的机型下,自动适配到不同的宽度。这就是涉及到要把所有要设配的机型的对应的值都要计算一遍。

screenmatch会根据res/values/dimens.xml文件中基础数值去计算并生成match_dp配置的所有宽度的dimens.xml。

而这个文件的意义,就在于你可以直接把他拷贝到res/values/dimens.xml中,并以此来计算出其他宽度dimens.xml。假如match_dp=384,400,411,533,640,720,768,820,会生成如下图dimens.xml:

注: 这里面还有优化空间,就是你需要多少像素值,就在里面写多少,不然可能有很多像素用不到,增加包的体积。比如说,1-10像素根本用不到,你可以它去掉,你感觉这个10个数字没啥,要是你适配20款不同高度时,就相当于有10*20个记录是用不到的。
屏幕适配插件:ScreenMatch基本使用和pad中注意事项_第5张图片
到目前为止screenmatch环境算是配置好了,但是如何使用呢?
直接在xml文件中使用 @dimen/dp_15

2.3如何结合实际项目使用呢?

screenmatch是采用宽度进行适配以及针对手机的,这也我在适配工作所遇到问题的来源。我的工作场景就是pad。在实际的工作中,UI出图的话一般是px为单位,这是需要进行装换,但是现在很多出图工具可以直接给你转好,这个转换过程省略了,但是将UI图转成screenmatch所需要尺寸需要我们自己来计算。

我用的是蓝湖,有兴趣的可以自己了解一下,他可以自己选择对应的宽度,自由度算是很高。

我说的这个问题是针对pad。screenmatch中base_dp是根据手机来的,我刚才也说了,pad和手机的宽度是颠倒的,所以在适配的时候需要进行一次转换。

转换如下:

竖屏下width/base_dp*竖屏下height

不知道你是否理解这个算法,其实竖屏下的高度就是横屏下的宽度,换成下面算法:

竖屏下width/base_dp*横屏width

计算的结果,就是UI出图的需要考虑width。

若是表达有误地方,欢迎指教和交流。

3参考

官方文档

你可能感兴趣的:(Android)