關于安卓加載不同形式values文件夾優(yōu)先級的探究
一.導入
我們大家都知道,安卓在加載values文件的時候。會根據(jù)屏幕的尺寸大小自動尋找合適的values文件夾加載,而values文件夾可能是: values,values-?dpi,values-分辯率x分辯率(用于px值屏幕適配),values-sw?dp(用于dp值屏幕適配)這幾種形式。那么這幾種形式的加載優(yōu)先級到底是怎樣的呢?
二.探究
1.用于測試的手機是小米6手機,分辨率為1080x1920。為了驗證測試結果,在Activity加載的時候打印一下日志,代碼如下:

這行代碼的意思是加載values文件夾中dimen里邊的dp值,并轉換成像素打印出來
2.創(chuàng)建不同形式的values文件,如下圖:

3.測試開始!
第1次運行,直接報錯,提示values-sw359.5dp: Error: Invalid resource directory name。這行提示告訴我們
values-sw這種形式后邊不能跟小數(shù)的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.會根據(jù)手機的分辯率大小先加載values-sw?dp這種形式的文件夾(這種文件夾形式用于dp適配,不懂的自行百度),如果找不到適合的文件夾會向下找不大于我們手機寬度dp值的文件夾,并且dp值不能為小數(shù)
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文件夾
總結一句話:優(yōu)先級是values-sw?dp>?hdpi>values-分辯率x分辯率>values