Android dp方式的屏幕适配工具使用(一些疑惑和注意事项)

Android dp方式的屏幕适配工具使用(Android Studio插件方式)

Android dp方式的屏幕适配工具使用(bat批处理方式)


屏幕适配工具,原理和用法请参考上面的文章链接。
本文将阐明另外一个问题,即如果在别的module中别的文件中也定义了dimen数据项,那岂不是不能适配了?莫急,看我详细说明。


我新建了一个项目,在项目中创建了一个test module,加上系统创建额app module,总共有2个module了。


在test module中的values目录下创建了3个xml文件:
dimens.xml:内包含一套基准定义的dimen数据(只能在一个公共的地方定义,名字格式建议不要改,建议)。也可包含其他的dimen,但注意值的引用:<dimen name="common_font_size">@dimen/sp_16</dimen>,
dimens_other.xml:里面的数据值引用:<dimen name="other_width">@dimen/dp_20</dimen>,
string.xml:在里面我突发奇想,也定义了dimen数据,注意值引用:<dimen name="max_width">@dimen/dp_180</dimen>




在app module中的values目录下新建2个xml文件:
dimens.xml:在里面定义了dimen数据,注意值引用:<dimen name="common_title_margin_top">@dimen/dp_8</dimen>
color.xml:在这里面我也是手欠定义了dimen数据,注意值引用:<dimen name="ratting_height">@dimen/dp_16</dimen>




跑了个apk,然后反编译发现:
所有module中values目录下的所有文件中,dimen数据都会汇聚到主module的values/dimens.xml文件中。如果dimen项的name重名,则以主module的values/dimens.xml文件数据为准(不覆盖)。


即,项目最后会只有一个公共的values目录,里面只有一个公共默认的dimens.xml文件,收集了所有其他module的values目录中各个文件定义的dimen数据。
如果使用了我的工具做了适配,则会有对应的values目录(比喻:values-w720dp-v13),如图:



也就是说,在上面例子中,test module和app module共5个文件中定义的dimen数据都汇集到values/dimens.xml文件中了。
而而而,注意,在values-w720dp-v13/dimens.xml文件中则只有test module中dimens.xml基准文件中定义的所有dimen数据。
这个时候,假如我用的是width=720dp的手机,要使用max_width变量【<dimen name="max_width">@dimen/dp_180</dimen>】,
但是,在values-w720dp-v13/dimens.xml中没有啊,在values/dimens.xml中才有,怎么办?
系统会从values-w720dp-v13目录往下寻找,最后找到了values/dimens.xml中,取到了变量,同时也取到了@dimen/dp_180引用。
注意,这个时候系统又会去寻找dp_180引用的值,还是会从自己的文件values-w720dp-v13/dimens.xml中开始寻找。
很幸运,在自己的目录中一下子就找到了,于是就取dp_180的值,即360dp。




以上就是我做实验和反编译分析得出的结果,即我的屏幕适配工具没有问题,但是你的按照我的规定来干。
通过上面的分析,得出另一个规律:
除了在处理适配的module中dimens.xml基准文件内定义了一套dp值外(比喻:<dimen name="dp_10">10dp</dimen>),
其他任何地方不允许直接定义dp值,而要引用,比喻:<dimen name="test_margin_right">@dimen/dp_6</dimen>。

在java类或者xml页面中都是用引用dimen的引用即可-> xml页面中:@dimen/dp_10、@dimen/max_width;java类中:R.dimen.dp_10、R.dimen.max_width。
只要做到了这一点,就解决了上面的问题。
即适配的各个宽度dp尺寸的dimens.xml,只需要有一套各自比例值的基础变量定义就够了。其他的无所谓,就算在values/dimens.xml中才找到的变量,读取其引用的值时,还是会回到自己的dimens.xml中读取最终准确的dp值。


插件目前更新到v2.1版本,欢迎下载使用。


下载地址:https://plugins.jetbrains.com/plugin/10058-screenmatch



猜你喜欢

转载自blog.csdn.net/fesdgasdgasdg/article/details/78133821
今日推荐