Android設備屏幕根據兩個屬性分類:尺寸和密度。你應該期望你的程序被安裝在合理的尺寸和密度范圍內。例如,你應該針對不同的尺寸和密度提供可選擇的資源,讓你的程序能有好的展現。
這裡有四個常用的尺寸:small, normal, large, xlarge
四個常用的密度:low(ldpi), medium(mdpi), high(hdpi), extra high(xhdpi)
為了能夠在不同的屏幕中顯示不同的樣式和位圖,你必須保存不同的資源在獨立的目錄中,和前面說的不同語言字符串類似。
還要注意的是,不同的屏幕方位(風景或者肖像)被指定為不同的屏幕尺寸。所以很多程序需要修訂樣式以便在不同方位都能有好的用戶體驗。
創建不同的樣式
為了在不同的屏幕尺寸下有好的用戶體驗,你必須為每個你想支持的屏幕尺寸創建一個唯一的XML樣式文件。每個樣式保存在對應的以-<screen_size>為後綴的資源目錄中。例如,一個large屏幕的樣式目錄為res/layout-large/。
提示:Android會自動縮放你的樣式,以便合適的填充屏幕。因此,你不用擔心不同尺寸屏幕下UI元素的決定尺寸,而是要更多關注樣式結構對用戶體驗的影響(比如相對於相鄰view的尺寸和位置)。
例如,下面這個工程包含默認的樣式和一個可選擇的large屏幕樣式:
MyProject/
res/
layout/
main.xml
layout-large/
main.xml文件名必須是相同的,但是內容是不同的,它為不同的屏幕尺寸提供對應的UI。
在程序中簡單引用樣式文件:
系統會基於你使用的設備加載合適的樣式文件。更多關於Android選擇合適資源顯示的信息,可以看這個教程: Providing Resources
作為另外一個例子,這個工程使用一個可選的風景(橫屏)方位樣式:
MyProject/
res/
layout/
main.xml
layout-land/
main.xml默認的layout/main.xml文件被使用在肖像(豎屏)方位。
如果你為風景方位和large屏幕提供一個特別的樣式,你需要使用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。這樣能幫助你在不同屏幕密度中取得好的繪圖質量和性能。
為了生成這些圖像,你需要從原始的矢量格式開始,采用下面的尺寸縮放生成對應密度的圖片:
xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0
ldpi: 0.75
意思就是說,如果你生成一個200x200的圖片給xhdpi設備,你就需要生成相同的資源給其他設備,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,系統會根據屏幕密度選擇合適的位圖。
提示:ldpi資源通常不是必須的,當你提供hdpi資源時,系統會縮放一半去適應ldpi屏幕。
更多關於創建程序圖標資源的教程,看這裡:Iconography design guide.