Supporting Different ScreensPREVIOUSNEXT
THIS LESSON TEACHES YOU TO
- Create Different Layouts
- Create Different Bitmaps
YOU SHOULD ALSO READ
- Designing for Multiple Screens
- Supporting Multiple Screens
- Iconography design guide
android裝置的螢幕在尺寸和像素密度方面不同,你的應用會在不同的尺寸或者像素密度的android裝置上運行,因此,應該添加一些替代的資源,以便你的應用在不同尺寸和像素密度的裝置上都有優良的介面。
- 一般有四種尺寸: small, normal, large, xlarge
- 四種密度: low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)
為不同螢幕申明的不同的布局檔案和圖片,應當分別放在不同的目錄中,就如同不同語言的字串的做法一樣。
另外,還應該注意螢幕的方向(橫屏、豎屏)也要考慮在內,因此許多應用應該修改布局檔案以便在不同的螢幕方向上都有良好的使用者體驗。
建立不同的布局檔案
為了保證你的應用在不同螢幕尺寸上表現良好,你應該為每一個螢幕尺寸設計布局,每個布局檔案儲存在適當的資來源目錄下,以-<screen_size>
做尾碼。例如:為large 螢幕設計的布局檔案儲存在res/layout-large/
下。
Note: android可以自動的縮放布局以完全適應你的螢幕,因此,為不同螢幕設計布局檔案不需要考慮絕對的UI元素的尺寸,而應該關注影響使用者體驗的布局結構,例如重要view的大小和它的位置。
例如,這個工程包括一個預設的布局檔案和large螢幕的替代布局檔案:
MyProject/ res/ layout/ main.xml layout-large/ main.xml
這些檔案的名字必須完全相同,但是內容不必。為了為不同尺寸的螢幕提供合適的UI。
像一般情況一樣,在你的app中簡單的使用布局檔案名稱
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);}
系統根據裝置的尺寸選擇使用合適目錄下的布局檔案。更多有關係統如何選擇正確的資源請參見
Providing Resources guide.
另一個例子,這個工程為橫屏提供了一個布局
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
Note: Android3.2以及之後的版本,提供了一個定義螢幕尺寸的先進的函數,使用獨立於密度的像素為UI設定最小的寬和高,實現為不同尺寸的螢幕指定資源。
這一節不涉及這個新的技術,更多資訊參見 Designing for Multiple Screens.
建立不同的位元影像
應當為不同密度的螢幕提供縮放合適的位元影像資源: low, medium, high 和extra-high 密度. 這樣可以讓你的應用在不同密度的螢幕上都有良好的圖形品質和效能。
建立這些圖片,你應當首先建立向量格式的原始圖片資源,然後使用以下參數縮放,為每個密度的螢幕建立圖片。
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (baseline)
- ldpi: 0.75
這就意味這如果你為xhdpi裝置建立了一個200x200的圖片,就應當為hdpi建立150x150的圖片,為mdpi建立100 x100的圖片,為ldpi的裝置建立75x75 的圖片,
然後,將這些圖片檔案儲存在合適的drawable資來源目錄下:
MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png
當你使用 @drawable/awesomeimage
時,系統根據螢幕的密度選擇合適的圖片。
Note: ldpi的資源並不是必需的。如果提供了hdpi的資源,系統會將hdpi的資源縮小一半以匹配ldpi的螢幕。
更多參見 Iconography design guide.
http://developer.android.com/training/multiscreen/screensizes.html