Android 自动创建最小宽度限定符文件插件 AutoDimens
Posted Eli Shaw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 自动创建最小宽度限定符文件插件 AutoDimens相关的知识,希望对你有一定的参考价值。
本文主要涉及以下几篇文章
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 ConstraintLayout 使用与适配(使用篇)