2018-09-04

关于安卓加载不同形式values文件夹优先级的探究


一.导入

我们大家都知道,安卓在加载values文件的时候。会根据屏幕的尺寸大小自动寻找合适的values文件夹加载,而values文件夹可能是: values,values-?dpi,values-分辩率x分辩率(用于px值屏幕适配),values-sw?dp(用于dp值屏幕适配)这几种形式。那么这几种形式的加载优先级到底是怎样的呢?

二.探究

1.用于测试的手机是小米6手机,分辨率为1080x1920。为了验证测试结果,在Activity加载的时候打印一下日志,代码如下:

图1

这行代码的意思是加载values文件夹中dimen里边的dp值,并转换成像素打印出来

2.创建不同形式的values文件,如下图:

2018-09-04_第1张图片
图2

3.测试开始!

第1次运行,直接报错,提示values-sw359.5dp: Error: Invalid resource directory name。这行提示告诉我们

values-sw这种形式后边不能跟小数的dp值。

把values-sw359.5dp文件夹删除,进行第2次测试。测试结果是加载了values-sw360dp中的dp值

把values-sw360dp文件夹删除,进行第3次测试。测试结果是加载了values-sw359dp中的dp值

把values-sw359dp文件夹删除,进行第4次测试。测试结果是加载了values-xxhdpi中的dp值

把values-xxhdpi文件夹删除,进行第5次测试。测试结果是加载了values-xxxhdpi中的dp值

把values-xxxhdpi文件夹删除,进行第6次测试。测试结果是加载了values-xhdpi中的dp值

把values-xhdpi文件夹删除,进行第7次测试。测试结果是加载了values-hdpi中的dp值

把values-hdpi文件夹删除,进行第8次测试。测试结果是加载了values-1080x1920中的dp值

把values-1080x1920文件夹删除,进行第9次测试。测试结果是加载了values中的dp值

把values文件夹删除,进行第10次测试。测试报找不到资源错误

三.结论

当 values,values-?dpi,values-分辩率x分辩率,values-sw?dp这几种形式都存在的时候

1.会根据手机的分辩率大小先加载values-sw?dp这种形式的文件夹(这种文件夹形式用于dp适配,不懂的自行百度),如果找不到适合的文件夹会向下找不大于我们手机宽度dp值的文件夹,并且dp值不能为小数

2.如果values-sw?dp找不到适合的文件夹,则会找?hdpi这种形式的文件夹。因为我的手机的dpi值是480,因此先加载了xxhdpi,如果不存在xxhdpi则会向更高分辩率的dpi文件夹中找,如果更高分辩率的dpi文件夹找不到那么会往低分辨率的dpi文件夹中一级一级向下找

3.如果values-sw?dp和?hdpi都没有合适的文件夹的话则会加载values-分辩率x分辩率的文件夹

4.如果values-sw?dp和?hdpi和values-分辩率x分辩率都找不到的话最终会找values文件夹

总结一句话:优先级是values-sw?dp>?hdpi>values-分辩率x分辩率>values

你可能感兴趣的:(2018-09-04)