當我們將一些提供了不同的資源檔案可供
android
系統選擇的時候,
android
會在執行時會根據一套適配的規則選擇最符合當前配置的資源。為了說明
android
怎麼選擇資源,假設我們有以下可選的資源檔案目錄,每乙個目錄都包含同一張的不同版本。
drawable/假設系統配置是下面這樣的:drawable-en/
drawable-fr-rca/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
locale =en-gb
screen orientation =port
screen pixel density =hdpi
touchscreen type =notouch
primary text input method =12key
在將系統配置與可選的資源對比之後,android
選擇drawable-en-port/
android根據下面的邏輯去選擇資源
1、排除跟系統配置不同的資源檔案
drawable-fr-rca/
被排除了,因為它違背了
locale=en-gb
。
drawable/例外:螢幕畫素密度(screen pixel density) 這種限定詞不會簡單地因為跟當前系統配置不同而被排除。即使當前螢幕的配置是hdpidrawable-en/
drawable-fr-rca/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
,drawable-port-ldpi/
不會被排除,因為每種螢幕密度都被認為可適配的。更多相關的資訊檢視
supporting multiple screens.
2、選出列表中(下乙個)最高優先順序限定詞(開始於
mcc,然後越往下越低)。
3、是否還有包含這個限定詞的資源目錄?
●否,返回步驟2
然後查詢下乙個限定詞(在例子中,答案是否,直到語言限定詞被找到)。
●是,繼續第4步。
4、排除沒有包含這個限定詞的資源檔案目錄。在這個例子中,系統排除了所有沒有包含語言限定詞的目錄:
drawable/例外:如果限定詞是螢幕畫素密度(device screen density),android會選擇最接近螢幕畫素密度的乙個。 總之,android比較偏向於將原始的大縮放成 小的。 參考 supporting multiple screens.drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
5、返回重複步驟2,
3,和4知道只剩下乙個目錄。在這個例子中,螢幕方向是下乙個用來匹配資源的限定詞。所以,沒有限定螢幕方向的資源檔案目錄就被排除了。
drawable-en/最後剩下的目錄是drawable-en-portdrawable-en-port/
drawable-en-notouch-12key/
雖然在請求每乙個資源檔案的時候都會執行上述的處理過程,但是系統自己會進行查詢過程的優化。其中乙個優化就是一旦系統的配置已經被載入,它可能會排除掉永遠不會匹配的可選資源。比如,如果配置中的語言為英語(
「en")
,那麼任何其他有語言限定詞又不是英語的就會從可選的資源目錄池當中排除(但是如果資源目錄中沒有語言限定詞,那麼它依然是可選的)。
當根據螢幕大小選擇資源的時候,如果找不到能跟當前螢幕匹配的資源,為比當前更小的螢幕設計的資源就會被使用(比如,乙個large-size
螢幕將會在必要的時候使用
normal-size
螢幕的資源檔案)。然而,如果唯一可選的資源比當前的螢幕大,系統不會使用它們並且你的程式會崩潰如果沒有其他的資源能夠跟系統配置匹配(比如,所有的
layout
資源都有
xlarge
的限定,但是當前的裝置螢幕是
normal-size
的)。
注意:在準確匹配資源上,限定詞的優先順序(在表2
)比限定詞的數量更重要。例如,在上面的步驟
4,列表中的最後一項還包含了三種能夠準確匹配系統配置的資源(
orientation
、touchscreen type
和input method
),然而
drawable-en
那項只有一項匹配(語言
)。然而,語言有比其他限定詞更高的優先順序,所以
drawable-port-notouch-12key
就被排除了。
本文翻譯自
how android finds the best-matching resource
kissazi2
Android怎麼找到最優適配資源
當我們將一些提供了不同的資源檔案可供 android 系統選擇的時候,android 會在執行時會根據一套適配的規則選擇最符合當前配置的資源。為了說明 android 怎麼選擇資源,假設我們有以下可選的資源檔案目錄,每乙個目錄都包含同一張的不同版本。drawable drawable en draw...
Android適配之版本適配
windowmanager.layoutparams lp getwindow getattributes lp.layoutindisplaycutoutmode windowmanager.layoutparams.layout in display cutout mode default ge...
android螢幕適配
1 配置android應用程式適配在不同的手機上,需要在androidmanifest.xml檔案的manifest標籤中新增子元素 1 2 3 4 5 6 7 8 9 10 manifestxmlns android supports screens android smallscreens tr...