Android總體上按照兩大類來分類設備屏幕:尺寸和分辨率。app在設備上運行應該考慮大小和分辨率。一樣的,你應該包含不一樣的資源來讓app適應不一樣的屏幕大小和分辨率。html
總體上有四種尺寸:小的,正常的,大的,超級大的android
和四種分辨率:低分辨率(ldpi),中分辨率(mdpi),高分辨率(hdpi),超高分辨率(xhdpi)app
爲了聲明不一樣屏幕的不一樣的佈局和突變,你須要把不一樣的資源放在不一樣的文件夾下,和處理不一樣語言的方法同樣。ide
一樣要注意到在考慮屏幕大小時也要考慮屏幕的方向(橫豎屏),因此不少app須要在每一個方向上調整佈局來來優化用戶體驗。佈局
建立不一樣的佈局post
爲了在不一樣的屏幕尺寸上優化用戶體驗,你應該爲每一個你要支持的屏幕大小建立一個單獨的xml文件。每一個佈局都應該被保存到對應的資源文件夾,命名以<screen_size>後綴結尾。例如,爲大屏幕建立的佈局文件應該存在res/layout-large優化
注意:Android會自動拉伸佈局來適應屏幕。對於不一樣屏幕的尺寸的佈局,不須要考慮UI控件的絕對大小,能夠把更多注意力放在影響用戶體驗的佈局結構上(好比重要的view相對於它的子view的大小和位置)。ui
例如,這個工程包含默認佈局和大屏幕的佈局spa
MyProject/code
res/
layout/
main.xml
layout-large/
main.xml
注:文件名必須徹底同樣,爲了適應不一樣屏幕大小的不一樣UI,他們的內容是不一樣的。
在app中和日常同樣引用layout文件
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.main); 5 }
系統根據app運行的屏幕大小來從對應的佈局文件夾中加載佈局文件。更多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。另外,在幫助文檔中指出,在androidmainfest.xml文件中必須進行以下代碼的配置。若是沒有這幾行代碼,無論你怎麼調整layout中的控件,對應分辨率的手機是沒有任何效果的。
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
注意:因爲android版本的不一樣,有些版本不支持xlargeScreens,能夠直接將android:xlargeScreens="true"去掉。
建立不一樣的圖片
你應該爲每一個分辨率提供合適的可被拉伸的圖片資源。這樣能夠在各類分辨率的屏幕上達到很好的繪圖質量和效果。
爲了生成這些圖片,應該提供矢量圖而且爲下面的每一個分辨率提供圖片:
xhdpi:2.0
hdpi:1.5
mdpi:1.0(baseline)
ldpi:0.75
着就意味着若是爲xhdpi設備提供一張200*200的圖片,應該爲其餘分辨率提供一樣的資源:150*150 for hdpi, 100 * 100 for mdpi, 75 * 75 for ldpi。
而後,把這些文件當道對應的資源文件夾下:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
任什麼時候候引用@drawable/awesomeimage,系統會根據屏幕分辨率選擇合適的圖片。
注意:低分辨率(ldpi)的資源並非老是須要,當提供了hdpi資源後,系統會把他們縮小一半來適應ldpi屏幕