Android使用通常使用兩個屬性來對設備的屏幕進行分類:尺寸和密度。你應該設想安裝你的應用程序的設備屏幕的尺寸和密度的范圍。如,你應該包含一些可選的資源,來優化你的應用程序在不同尺寸和密度屏幕上的顯示外觀。
1. 四種一般性的尺寸:small、normal、large、xlarge
2. 四種一般性的密度:low(ldpi)、medium(mdpi)、high(hdpi)、extra high(xhdpi)
對於不同的屏幕所使用的布局和位圖,你必須把它放到獨立的目錄中,類似於多語言支持。
還要注意屏幕方向(橫屏或豎屏)給屏幕尺寸所帶來的變化,因此很多應用程序需要修改布局,以便優化在每個方向中的用戶體驗。
創建不同的布局
要優化在不同屏幕尺寸上的用戶體驗,你應該給每種要支持的屏幕尺寸創意一個唯一的布局XML文件。每種布局文件都應該保存在其對應的資源目錄中,目錄名稱要用_<screen_size>作為後綴。例如,針對大屏幕的唯一布局應該被保存在res/layout_large/目錄下。
注意:為了正確的填充屏幕,Android會自動縮放你的布局。這樣,不同屏幕尺寸的布局就不必擔心UI元素的絕對尺寸,而是要關注影響用戶體驗的布局結構(如重要的View相對與兄弟View的尺寸或位置)
例如,包含默認布局和針對large屏幕的可選布局的項目:
MyProject/
res/
layout/
main.xml
layout-large/
main.xml
布局文件名必須完全相同,但是為了提供對應屏幕尺寸的UI,它們的內容是不同的。
跟通常一樣,在你的應用程序中簡單的應用布局文件即可:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
Android系統會基於運行你的應用程序的設備的屏幕尺寸,來加載對應的布局文件。更多的信息,請參照“Providing Resources”指南。
下例是針對橫向屏幕的可選布局:
MyProject/ res/ layout/ main.xml layout-land/ main.xml默認layout/main.xml被用於縱向布局。
如果你要給縱向提供特殊的布局,同時適用於大屏幕,那麼你需要使用large和land修飾詞:
MyProject/ res/ layout/ # default (portrait) main.xml layout-land/ # landscape main.xml layout-large/ # large (portrait) main.xml layout-large-land/ # large landscape main.xml注意:Android3.2以後,支持一種先進的定義屏幕尺寸的方法,它允許你使用基於密度無關的像素術語中的寬度和高度來給屏幕尺寸指定資源。本節課不包含這項新技術,更多信息,請閱讀:Designing for Multiple Screens.
創建不同的位圖
你應該始終給每種一般性密度提供正確縮放的位圖資源:low、medium、high和extra-high。這有助於在所有屏幕密度上都獲得良好的圖形質量和性能。
要生成這些圖片,你應該用矢量格式的原始資源,並且按照以下縮放比來生成每種密度下的圖片:
1. xhdpi:2.0
2. hdpi:1.5
3. mdpi:1.0(基線)
4. ldpi:0.5
這意味著,如果要給xhdpi設備生成200x200的圖片,那麼相同的資源還有分別生成以下尺寸的圖片:用於hdpi的150x150;用於mdpi的100x100;用於ldpi的75x75.
然後把它們分別放到對應的可繪制資源目錄中:
MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png不管何時引用@drawable/awesomeimage資源,系統都會基於屏幕的密度來選擇對應的位圖。