Android 自动创建最小宽度限定符文件插件 AutoDimens

Posted Eli Shaw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 自动创建最小宽度限定符文件插件 AutoDimens相关的知识,希望对你有一定的参考价值。

本文主要涉及以下几篇文章

Android 屏幕适配总结

Android ConstraintLayout 使用与适配(使用篇)

Android ConstraintLayout 使用与适配(适配篇)

说明:本插件基于 ScreenMatch 的源码修改,十分感谢 ScreenMatch 作者,使本插件减少很多工作量。之所以重复造轮子,有以下三个原因:

    1.想自己学习写一个插件

    2.本插件主要针对 ConstraintLayout + SP 适配的方式,针对 ConstraintLayout 无法适配字体,使用最小宽度限定符的方式适配工程中的字体。使用 ConstraintLayout 适配的方式见:Android ConstraintLayout 使用与适配(适配篇)

    3.指明 ScreenMatch 中的一个问题,ScreenMatch 不会创建指定的 base_dp 值的dimens.xml文件,如他设置的最小宽度基准值是 360,但是并没有创建 values-sw360dp 的文件夹,这是不对的,如果认为默认文件values是360dp的最小宽度值也是错误的,因为默认文件夹是320X640 dpi160的屏幕,因此默认最小宽度值是320dp。这一点可以用事实证明,使用如下方式证明:

1.将屏幕宽320分成3个View,第一个View宽10dp,第二个View宽300dp,第三个View宽10dp,如果默认屏幕宽是320dp,那运行此布局肯定能看到第三个View,并且第三个View与第一个View显示大小一致。

2.将屏幕高480分成3个View,第一个View高10dp,第二个View高460dp,第三个View高10dp,如果默认屏幕高是480dp,那运行此布局肯定能看到第三个View,并且第三个View与第一个View显示大小一致。

测试布局代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--证明默认屏幕宽是 320dp Begin-->
    <View
        android:id="@+id/view1"
        android:layout_width="10dp"
        android:layout_height="30dp"
        android:layout_marginTop="30dp"
        android:background="@color/colorAuto"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/view2"
        android:layout_width="300dp"
        android:layout_height="30dp"
        android:background="@color/colorAccent"
        app:layout_constraintBottom_toBottomOf="@+id/view1"
        app:layout_constraintStart_toEndOf="@+id/view1"
        app:layout_constraintTop_toTopOf="@+id/view1" />

    <View
        android:id="@+id/view3"
        android:layout_width="10dp"
        android:layout_height="30dp"
        android:background="@color/colorBlack"
        app:layout_constraintBottom_toBottomOf="@+id/view1"
        app:layout_constraintStart_toEndOf="@+id/view2"
        app:layout_constraintTop_toTopOf="@+id/view1" />
    <!--证明默认屏幕宽是 320dp End-->

    <!--证明默认屏幕高是 480dp Begin-->
    <View
        android:id="@+id/view4"
        android:layout_width="30dp"
        android:layout_height="10dp"
        android:layout_marginLeft="30dp"
        android:background="@color/colorAuto"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/view5"
        android:layout_width="30dp"
        android:layout_height="460dp"
        android:background="@color/colorParent"
        app:layout_constraintEnd_toEndOf="@+id/view4"
        app:layout_constraintStart_toStartOf="@+id/view4"
        app:layout_constraintTop_toBottomOf="@+id/view4" />

    <View
        android:id="@+id/view9"
        android:layout_width="30dp"
        android:layout_height="10dp"
        android:background="@color/colorBlack"
        app:layout_constraintEnd_toEndOf="@+id/view5"
        app:layout_constraintStart_toStartOf="@+id/view5"
        app:layout_constraintTop_toBottomOf="@+id/view5" />
    <!--证明默认屏幕高是 480dp End-->
</androidx.constraintlayout.widget.ConstraintLayout>

使用 Genymontion 创建一个 320X480 的屏幕,并设置dpi为160,运行结果如下

一、安装

Android Studio 选择 File —— Settings —— Plugins 在 Marketplace 中搜索 AutoDimens

 

二、使用

1.在项目区域点击右键选择 AutoDimens 或使用快捷方式Ctrl+Alt+I。

2.选择要适配的 Module 名称

3.创建成功提示 Ok, create dimens file successfully!

创建成功后会在选择的 Module 下创建相应的最小宽度限定符文件夹与 dimens.xml 文件,如下

创建成功后还会在项目根目录中创建 autoDimension.properties 配置文件,如下

三、autoDimension.properties 配置文件说明

#指定最小宽度基准值,应该使用设计图尺寸的宽,默认最小宽度基准值为 360
baseSW=

#按最小宽度限定符适配的方式,添加最小宽度值,多个值使用英文逗号(,)分割 如 360,420,450
#目前默认包含的最小宽度值为:384,392,400,410,411,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365
#如果不需要某个最小宽度值,可在 ignoreSize 参数后指明
#将按指定的 XXX 值创建相应的 values-swXXXdp 文件夹与 dimens.xml 文件
matchSW=

#取消默认包含的最小宽度值,多个值使用英文逗号(,)分割 如 384,392,400
#目前默认包含最小屏幕尺寸值为:384,392,400,410,411,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365
#指定后将不会创建相应默认值中的 values-swXXXdp 文件夹与 dimens.xml 文件
ignoreSW=

#指定默认的 module 名,如果设置指定的 module 名称后,
#将直接创建指定的最小宽度文件夹与相应 dimens.xml 文件并刷新工程,不会有任何提示
designateModule=

#是否直接创建带默认值的 dimens.xml 文件,
#如果为 true 则在指定的各最小宽度限定符文件夹中直接创建 dimens.xml 文件,
#并且每个 dimens.xml 文件中默认包含 1sp - 100sp 的 dimen 值
isUseDefaultDimension=false

 四、使用建议

不建议使用懒人方式直接创建所有包含默认值的文件 dimens.xml,应该在默认 values 中的 dimens.xml 写明自己用到的值,项目写完后再使用适配工具创建所有最小宽度限定符文件。原因是减少无用代码,毕竟少一个值就相当于少指定最小宽度N乘1个值。

以上是关于Android 自动创建最小宽度限定符文件插件 AutoDimens的主要内容,如果未能解决你的问题,请参考以下文章

Android 屏幕适配总结

Android 屏幕适配总结

Android ConstraintLayout 使用与适配(使用篇)

Android ConstraintLayout 使用与适配(使用篇)

一种非常好用的Android屏幕适配

smallestWidth 限定符适配 : 屏幕适配-插件:ScreenMatch