Android 屏幕适配神器ScreenMatch


一、smallestWidth限定符 适配(推荐)

1、smallestWidth 限定符适配原理

/-------------------------------------------------------------------------------------------------------
1、smallestWidth 限定符适配原理与屏幕分辨率限定符适配原理一样,
系统都是根据限定符去寻找对应的 dimens.xml 文件
/-------------------------------------------------------------------------------------------------------
2、例如程序运行在最小宽度为 360dp 的设备上,系统会自动找到对应的
values-sw360dp 文件夹下的 dimens.xml 文件。
/-------------------------------------------------------------------------------------------------------
3、区别屏幕分辨率限定符适配是拿 px 值等比例缩放,而 smallestWidth
限定符
适配是拿 dp 值来等比缩放而已。
需要注意的是“最小宽度”是不区分方向的,即无论是宽度还是高度,哪一边
小就认为哪一边是“最小宽度”。如下分别为最小宽度为 360dp 与最小宽度为
640dp 所对应的 dimens.xml 文件:
/-------------------------------------------------------------------------------------------------------

2、为什么选择 smallestWidth 限定符适配?

既然原理都一样,都需要多套 dimens.xml 文件,那为什么要选择 smallestWidth 限定符适配呢?

1、屏幕分辨率限定符适配是根据屏幕分辨率的,Android 设备分辨率一大堆,而且还要考虑虚拟键盘,这样就需要大量的 dimens.xml 文件。因为无论手机屏幕的像素多少,密度多少,90% 的手机的最小宽度都为 360dp,所以采用 smallestWidth 限定符适配只需要少量 dimens.xml 文件即可。
2、屏幕分辨率限定符适配采用的是 px 单位,而 smallestWidth 限定符适配采用的单位是 dp 和 sp,dp 和 sp 是 google 推荐使用的计量单位。又由于很多应用要求字体大小随系统改变,所以字体单位使用 sp 也更灵活。
3、屏幕分辨率限定符适配需要设备分辨率与 values-xx 文件夹完全匹配才能达到适配,而 smallestWidth 限定符适配寻找 dimens.xml 文件的原理是从大往小找,例如设备的最小宽度为 360dp,就会先去找 values-360dp,发现没有则会向下找 values-320dp,如果还是没有才找默认的 values 下的 demens.xml 文件,所以即使没有完全匹配也能达到不错的适配效果。

3、使用步骤(重点在这)

3.1、获取设计图最小宽度(单位为 dp)

  • 蓝湖:开发平台切换到 Android,设计图宽度即为最小宽度。
  • psd 源文件:用像素大厨查看,设计图宽度即为最小宽度。(注意像素大厨需要选择与设计图对应的 dpi 进行显示)
  • dp 单位的设计图:设计图宽度即为最小宽度。
  • px 单位的设计图:问 UI 设计师是几倍图,然后最小宽度 = 设计图宽度/倍数。

3.2、以设计图最小宽度作为基准值,生成所有设备对应的 dimens.xml 文件

3.2.1、在 Android Studio 中安装 ScreenMatch 插件

在这里插入图片描述

3.2.2、在项目的默认 values 文件夹中需要一份 dimens.xml 文件

其他大神 github 源码已经提供了一份,直接复制过来即可。在这里插入图片描述

3.2.3、执行生成

插件安装好后,在项目的任意目录或文件上右键,选择 ScreenMatch 选项。如下图:

在这里插入图片描述

然后选择在哪个 module 下执行适配。
即基于哪个 module 下的 res/values/dimens.xml 文件作为基准 dimens.xml 文件,生成的其他尺寸 dimens.xml 文件放在哪个 module 下。例如选择 app,然后点击 OK ,出现如下界面表示生成文件成功。如下图:

在这里插入图片描述

然后再看看 res 目录下会自动生成一堆 dimens.xml 文件,如下图:

在这里插入图片描述

通过上面的步骤就已经生成了所有设备对应的 dimens.xml 文件。

3.2.4、根据设计图填写最小宽度基准值,并填写需要适配的设备最小宽度 dp 值
  • 步骤 3.2.3 是以插件默认的最小宽度基准值为 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 )生成的文件,但实际情况要根据设计图和需求设置。
  • 例如设计图的最小宽度为 375dp,则需要更改最小宽度基准值为 375dp。
  • 以上修改需要在配置文件里修改,即 screenMatch.properties 文件,该配置文件是执行完上面第 3 步后自动生成在项目的跟目录下的。如下图:

在这里插入图片描述

打开配置文件,修改下图中 1、3、4 的值即可。(图中单位均为 dp)
1:最小宽度基准值,填写设计图的最小宽度值即可。
2:插件默认适配的最小宽度值,即默认情况下会生成如下值的 dimens.xml 文件。
3:需要适配的最小宽度值(如果是小数,则保留 4 位小数。例如 392.727272…,则取 392.7272),即你想生成哪些 dimens.xml 文件。
4:忽略不需要适配的最小宽度值,即忽略掉插件默认生成的 dimens.xml 文件。

在这里插入图片描述

配置文件修改完成后,重新执行第 3 步,生成新的 dimens.xml 文件。

3.3、根据设计图标注,在布局写上对应的值

设计图标注多少 dp,布局中就写多少 dp ,非常方便!

上传到蓝湖:显示多少 dp 就写多少 dp。
psd 源文件:用像素大厨查看,显示多少 dp 就写多少 dp(注意像素大厨需要选择与设计图对应的 dpi 进行显示)
dp 单位的设计图:标注多少 dp 就写多少 dp。
px 单位的设计图:问 UI 设计师是几倍图,然后控件的宽度 = 设计图中控件标注的宽度/倍数(高度同理)。

举例:例如设计图上一个Button 的宽为 360dp,高为 50dp,字体大小为 15 sp,在布局中则这样使用:

    <Button
        android:layout_width="@dimen/dp_360"
        android:layout_height="@dimen/dp_50"
        android:textSize="@dimen/sp_15"/>

代码中动态设置 dp 或 sp:
如果需要在代码中动态设置 dp 或 sp,则需要通过 getDimension()方法获取对应资源文件下的 dp 或 sp 值再设置。如下:

        /*获取sp值*/
        float pxValue = getResources().getDimension(R.dimen.sp_15);//获取对应资源文件下的sp值
        int spValue = ConvertUtils.px2sp(this, pxValue);//将px值转换成sp值
        mTvShowParams.setTextSize(spValue);//设置文字大小

        /*获取dp值*/
        float pxValue2 = getResources().getDimension(R.dimen.dp_360);//获取对应资源文件下的dp值
        int dpValue = ConvertUtils.px2dp(this, pxValue2);//将px值转换成dp值


二、屏幕分辨率限定符 适配(不推荐)

屏幕分辨率限定符适配需要在 res 文件夹下创建各种屏幕分辨率对应的 values-xxx 文件夹,如下图:

在这里插入图片描述

然后根据一个基准分辨率,例如基准分辨率为 1280x720,将宽度分成 720 份,取值为 1px~720px,将高度分成 1280 份,取值为 1px~1280px,生成各种分辨率对应的 dimens.xml 文件。
如下分别为分辨率 1280x720 与 1920x1080 所对应的横向 dimens.xml 文件:

在这里插入图片描述

假设设计图上的一个控件的宽度为 720px,那么布局中就写 android:layout_width="@dimen/x720" ,当运行程序的时候,系统会根据设备的分辨率去寻找对应的 dimens.xml 文件。
例如运行在分辨率为 1280x720 的设备上,系统会自动找到对应的 values-1280x720 文件夹下的 lay_x.xml 文件,由上图可知 x720 对应的值为720.px,可铺满该屏幕宽度。运行在分辨率为 1920x1080 的设备上,系统会自动找到对应的 values-1920x1080 文件夹下的 lay_x.xml 文件,由上图可知 x720 对应的值为 1080.0px,可铺满该屏幕宽度。这样就达到了屏幕适配的要求!

作者:KingWorld
链接:https://www.jianshu.com/p/d204c684c240
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


三、原文作者

作者:KingWorld
链接:Android 屏幕适配神器ScreenMatch

猜你喜欢

转载自blog.csdn.net/fenglolo/article/details/126665724