Android資源匹配過程(二)

上一篇文章了解了Android資源標簽屬性及優先級 后,下面我們來看資源的具體匹配規則。


下面以一個實際例子作為說明。
假設某App中的drawable資源有如下幾種選項:

  • drawable/
  • drawable-en/(英語)
  • drawable-fr-rCA/(法語和加拿大地區)
  • drawable-en-port/(豎屏)
  • drawable-en-notouch-12key/(不帶觸摸屏并具備12鍵的鍵盤)
  • drawable-port-ldpi/(豎屏低密度屏幕)
  • drawable-port-notouch-12key/(豎屏,不帶觸摸屏,12鍵鍵盤)

假設設備當前設備配置為:
Locale=en-GB
Screen orientation=port
Screen pixel density=hdpi
Touchscreen type=notouch
Primary text input method=12key

匹配過程分為兩個階段:

第一階段:篩選掉與設備當前配置不相符的資源選項。
在淘汰過程中,對于資源選項里沒有顯示寫出來的配置,不作為評判標準;而資源選項里顯示寫出來的,符合當前配置的可以通過篩選,否則直接淘汰。

特別注意,Android 明確規定,Density標簽不在第一階段的淘汰范圍內。

經過篩選,結果如下:

drawable/
drawable-en/
drawable-fr-rCA/(淘汰
drawable-en-port/(豎屏)
drawable-en-notouch-12key/
drawable-port-ldpi/(作為特例保留下來
drawable-port-notouch-12key/

第二階段:選擇最優解
經過第一階段篩選后,剩余的選項都是完全符合設備當前配置要求的(除了特列外)。第二階段的主要任務就是在剩下的資源選項中按照優先級順序篩選出一個最優的選項。

第一步,先選擇MCC,MNC來考察,發現沒有選項包含這個標簽。
第二步,繼續選擇語言與地區標簽。由于當前配置是en-GB,所以沒有帶這個標簽的選項被排除。

經過篩選,結果如下:

drawable/(淘汰)
drawable-en/
drawable-fr-rCA/(淘汰)
drawable-en-port/(豎屏)
drawable-en-notouch-12key/
drawable-port-ldpi/(淘汰)
drawable-port-notouch-12key/(淘汰)

接下來的步驟中我們重復利用這一規則,直到篩選出符合條件的選項。此例中,最終只剩下如下選項:

  • drawable-en-port/(最終匹配成功)

注意:應用使用的每種資源類型時候,需要提供默認資源。這里的默認資源指未標記配置限定符的資源。例如,drawable/ 中的資源是默認可繪制資源。

參考:
Android資源管理框架(Asset Manager)簡要介紹和學習計劃

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • android res 資源匹配目錄 、 drawable與 mipmap的區別 在res目錄下,有各種各樣的資源...
    chendroid閱讀 5,532評論 0 8
  • 概述 對于Android中的應用資源,例如圖像、字符串、布局、顏色等,最好是在res文件夾中定義,而不是在代碼中定...
    CP9閱讀 2,341評論 1 2
  • 一直以來對于系統選擇資源文件的流程都模糊不清,每次定義資源的時候都戰戰兢兢,終于忍無可忍,無需再忍,決定掏出官方文...
    李小神不偷懶閱讀 3,804評論 4 5
  • 早些年起,短信代替電話成為了親朋好友之間聯絡感情的聯系方式。過年過節的時候,手機叮咚一聲,一條不足60字的小小的短...
    穹涯閱讀 739評論 0 4
  • 昨晚兩只煙,一點感覺也沒有。去年在銀西,抽鳳凰和細蘭州時還輕松了,如今一只蘇煙一只芙蓉王都不頂用??础度碎g...
    文弱的宋朝閱讀 608評論 0 0