美文网首页
2018-09-04

2018-09-04

作者: 码农从入门到放弃 | 来源:发表于2018-09-04 14:33 被阅读0次

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


    一.导入

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

    二.探究

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

    图1

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

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

    图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

          本文链接:https://www.haomeiwen.com/subject/buygwftx.html