How Android Finds the Best-matching Resource
執行個體:有如下一些資源檔:drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
And assume the following is the device configuration:
當前手機的狀態如下:
Locale = en-GB
Screen orientation = port
Screen pixel density = hdpi
Touchscreen type = notouch
Primary text input method = 12key
By comparing the device configuration to the available alternative resources, Android selects drawables from drawable-en-port.最終的資源選擇結果是選擇了檔案夾drawable-en-port。
關鍵選擇步驟:1.第一步是排除與當前手機狀態完全相悖的資源檔夾所謂相悖,比如當前是英語,那麼資源問價夾下就不能包含其它語言,比如法語、中文等;但是如果某資源檔根本不包含語言這一屬性,那麼它是不會在這一輪被淘汰的。也就是說,在這一輪裡,對於某一手機狀態的屬性,資源檔如果包含此屬性,那麼就應該與手機的屬性相同,否則就被淘汰,但是可以完全不包含該屬性,則不會被淘汰。註:在這一輪裡,可以認為各屬性的淘汰是沒有優先順序的,只要屬性相悖,都會被淘汰
2.選擇最合適的經過第一輪淘汰後,留下的都是可以作為最終結果的資源檔夾的候選人。如果此時只剩下一個檔案夾了,那這一步就不用做,就是它了;如果有很多,那麼就要優中選優啦。選擇的原則是按照優先順序表,逐條篩選:如果某屬性大家都不具備,則跳過;如果某屬性有具備的,那麼不具備該屬性的則被淘汰;直到最後只剩下一個為止。