Android學習路線(十八)支持不同設備——支持不同的屏幕

Android系統使用兩個普通屬性:尺寸和密度,來對設備屏幕進行分類。你需要先預測你的應用將會在什麼樣屏幕的設備上安裝,包括屏幕尺寸和密度。這樣的話,你就需要提供一些可選的資源類讓你的應用在不同屏幕的設備上有最佳的展示。

  • 有四種普遍的尺寸:small, normal, large, xlarge
  • 還有四種普遍的密度:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)

要爲不同的屏幕聲明不同的佈局和圖片,你需要讓這些可選的資源放在不同的目錄下,這和如何支持多語言的做法類似。

同樣要考慮到在不同屏幕尺寸下的屏幕方向配置,因此很多應用通在不同的方向上改變不同的佈局來實現最佳的用戶體驗。

創建不同的佈局


讓你的應用在不同的屏幕尺寸上有好的用戶體驗,你應該爲每個你想支持的屏幕尺寸創建一個唯一的XML佈局文件。每個佈局文件應該被存放到適當的資源目錄下,目錄名以 -<screen_size> 爲後綴。例如,一個存放大屏幕的佈局目錄的名稱是res/layout-large/

提示: Android系統會自動伸縮佈局來正確的適配屏幕。因此,你不需要擔心你爲不同佈局設計的UI元素的實際尺寸,你要注意的是影響用戶體驗的佈局結構(例如重要佈局相對與它旁邊佈局的尺寸和位置)。

例如,這個項目包括一個默認的佈局目錄以及是用於大屏幕的佈局目錄:

MyProject/
    res/
        layout/
            main.xml
        layout-large/
            main.xml

文件名一定要完全相同,但是它們的內容要不一樣,用來爲不同的屏幕尺寸提供最佳的UI展示。

在應用中簡單地引用佈局:

@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
}

系統會根據設備的屏幕尺寸加來適當的佈局目錄下的佈局文件。更多關於選取適當佈局資源的信息,請參閱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

提示: Android 3.2 以及更高的系統提供了定義屏幕尺寸的高級方法,它允許您根據密度無關的像素方面的最小寬度和高度,以指定的屏幕尺寸的資源。這篇課程不包含這項新技術。更多信息,請參閱Designing for Multiple Screens

創建不同的圖片


你應該爲每個通用密度的設備提供能夠正確縮放的圖片資源:low, medium, high and extra-high 密度。這能幫助你在所有屏幕密度的設備上獲得更高的圖片質量以及更好的性能。

要生成這些圖片,你首先需要使用下面的尺寸規模爲你的原生資源的矢量資源爲不同的屏幕密度生成圖片:

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (baseline)
  • ldpi: 0.75

這表示如果你爲xhdpi的設備生成一個200x200 的圖片,你就應該爲hdpi的設備生成150x150 的相同資源,mdpi設備100x100,ldpi設備75x75。

然後將這些文件放在適當的drawable資源目錄下:

MyProject/
    res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png

你每次引用@drawable/awesomeimage的時候,系統都會根據屏幕密度選擇適當的圖片。

提示: 低分辨率(ldpi) 資源並不是必要的。當你提供了hdpi的資源時,系統會將資源縮小一半來正確的適應ldpi的屏幕。

更多關於爲應用創建icon資源的嚮導,請參閱Iconography design guide

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章