外置資源一個很重要的原因是Android的動態資源選取機制。
使用下面描述的結構,你可以為指定的語言、地區和硬體設定建立不同的資源值,供Android系統在運行時動態選取。
這能讓你建立指定語言、地區和硬體的使用者介面,而不需要更改你的代碼。
通過在/res檔案夾下設定平行的檔案夾來設定供選擇的資源,使用“-”分割符來指定應用程式支援的條件。
下面的層次例子,顯示了檔案夾結構,包括預設的字串值,法語字串值和額外的加拿大地區的法語字串值。
Project/
res/
values/
strings.xml
values-fr/
strings.xml
values-fr-rCA/
strings.xml
下面的列表給出了你可以用來定製資源檔名的標識符:
❑語言 兩個小寫ISO 639-1語言代號(例如,en)
❑地區 小寫“r”,後跟兩個大寫的ISO 3166-1-α-2 語言代號
(例如,rUS,rGB)
❑螢幕方向 “port”(portrait)、“land”(landscape)、
“square”(square)之一
❑螢幕像素密度 一英寸中的像素點(dpi)(例如,92dpi,108dpi)
❑觸控螢幕類型 “notouch”、“stylus”、“finger”之一
❑鍵盤顯示 “keysexposed ”或“keyshidden”
❑鍵盤輸入類型 “nokeys”、“qwerty”、“12key”之一
❑UI導航類型 “notouch”、“dpad”、“trackball”、“wheel”之一
❑螢幕解析度 最大的螢幕尺寸(像素)(例如,320x240)
你可以為任何資源類型指定多個標識符,相互之前使用“-”分隔字元。任意組合都是支援的,但是,它們必須按照列表中給出順序使用,且每種類型的標識符不能超過1個值。
接下來的例子顯示了drawable資源有效和無效的檔案夾名。
❑ 有效:
drawable-en-rUS
drawable-en-keyshidden
drawable-land-notouch-nokeys-320x240
❑ 無效:
drawable-rUS-en (順序錯了)
drawable-rUS-rUK (單個類型的標識符擁有多個值)
當Android在運行時擷取資源時,它會從可供選擇的資源裡尋找最匹配的。從檔案夾(檔案夾中都含有需要的值)列表開始,Android選擇標識符匹配最多的檔案夾。如果兩個檔案夾匹配的一樣多,那麼,上面列表中的匹配標識符的順序會用來作決勝局的依據。