1. 程式人生 > >Android_Android工程res目錄下的資原始檔夾螢幕適配

Android_Android工程res目錄下的資原始檔夾螢幕適配

 
特殊說明:關於螢幕大小size相關的屬性不在步驟1的過濾清除條件裡(dpi屬性和screen size屬性):
1) 對於dpi屬性系統的選擇方法是"best match"---即如果沒有找到準確的屬性,可以接著尋找最接近的屬性資料夾。例如:我的g7手機,應該是values-hdpi,但如果沒有values-hdpi,則可以找出最接近的資料夾(先找values-xhdpi到values-mdpi到values最後到values-ldpi,注意values在values-ldpi之前先找到,系統認為values比values-ldpi更接近我的values-hdpi屬性);

2) 對於screen size屬性系統的選擇方法是"向下best match",即如果沒找到準確的屬性,只可以接著在比自身屬性小的資料夾裡找最接近的屬性資料夾。例如:我的g7手機,應該是values-normal,但如果沒有values-normal,則可以找出最接近的資料夾(先找values再到values-small,注意,系統認為values比values-small更接近我的values-normal屬性,但之後就不會再找values-large與values-xlarge了,因為是"向下best match",large與xlarge都比normal大)。
2. 例項說明
工程有如下資料夾:
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

1) 清除包含任何與手機配置有衝突的屬性的資原始檔夾(藍色字體表現被清除)
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
注意:因為dpi屬性使用"best match"選擇,所以drawable-port-ldpi/
沒被清除。
2) 選擇文件1中的表格“Table 2. Configuration qualifier names. ”最高優先順序的屬性(MCC最高,然後依次向下選擇)。
3)  有包含上述屬性的資料夾嗎?
如果沒有,跳轉步驟2,選擇下一優先順序高的屬性;
如果有,繼續步驟4;
4) 清除不包含此屬性的所有資料夾
drawable/
drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
5) 重複步驟2和3,直到步驟4中只剩下一個資料夾則返回。例子中,螢幕方向是下一個最高優先順序的屬性,所以可以清除兩個資料夾:
drawable-en/
drawable-en-port/
drawable-en-notouch-12key/

最終找到的資料夾就是drawable-en-port/

由上述過程可看出,匹配是看最高優先級別的屬性,而不是一共匹配到的屬性數量,例如:values-en-normal-hdpi的手機,values-en匹配比vaues-normal-hdpi更合適。


3、 備註
1. 文件1中的表格“Table 2. Configuration qualifier names. ”列出的屬性集並不是一直不變的,有些新屬性是在高階的android version才加入的,系統在識別到此新屬性時會自動加上支援新屬性的android最低版本屬性,例如:xhdpi是android 2.2(sdk新加入的,則values-xhdpi系統會自動認為是values-xhdpi-v8,這樣新屬性一定不會在android舊版本中匹配到了;
2. 對於指定解析度的屬性(例如:values-hdpi-1024x600,values-hdpi-960x540,values-mdpi-1024x600),指定解析度屬性並沒出現在官網的匹配屬性集裡,也沒找到對於解析度屬性的詳細說明,經測試,這個解析度屬性匹配並不準確,例如Galaxy Nexus(1280x720 ),卻可以匹配到values-hdpi-1024x600,因此希望最好不使用解析度屬性。


4、 參考文件
1  :Android資源螢幕適配官方文件: