APP支持不同的設備 之 支持不同屏幕

對android的屏幕分類,主要是依靠這2個屬性來分類:size和density.你要意識到你的程序會被安裝到的設備的屏幕,都是由size和density來限定這個屏幕的規格。這樣的話,你的APP要包括多種可選擇的資源,使得你的程序在不同的size和density的屏幕上達到最好的顯示效果。

size在廣義上來說一般有四種:small,normal,large,xlarge

以及四種density:low(ldpi),medium(mdpi),high(hdpi),extra high(xhdpi)

爲了明確在不同的屏幕上要使用的佈局和bitmap資源,你必須要把這些可選擇的資源放在不同的目錄之下,就像前面說的定義不同語言的字符串一樣。

而且也要注意,屏幕方向(橫屏或者豎屏)的變化也是被認爲是一種屏幕size的變化,所以很多APP也需要對在不同屏幕方向下的layout進行修正,以達到最優的用戶體驗。

創建不同的layout

爲了讓你的用戶在不同的屏幕size下都達到最優的體驗效果,那麼針對你的app想支持的不同的屏幕size,你都要去提供一個唯一的xml layout文件。每一個layout都要被放在對應的目錄之下,這個目錄用 –<screen_size(屏幕規格)>這個後綴來修飾.比方說一個針對大屏的layout文件要放置在/res/layout-large/目錄下。

注意:android系統爲了適當的去適應屏幕,它會自動去縮放你的layout。所以,對於不同屏幕size的layout,你不必去糾結於非常精確的UI元素的大小,而是要關注整個layout的佈局,這個是影響用戶體驗的關鍵(比方說裏面在同一層的重要的兄弟視圖的大小和位置).

下面的例子裏面,這個項目包含有一個默認的layout和一個針對large規格屏幕的layout :

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

這2個文件的名字必須一致,但是爲了在不同的對應的屏幕下展現最合適的UI,裏面的內容可以不一樣。

在你的app代碼裏面使用layout的方法,一般是:

@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
}
系統會根據你的app運行的屏幕規格,來載入對應的合適的layout目錄。想了解更多關於android如何選擇合適的資源,請閱讀Providing Resources

下面舉另外一個例子,這個例子裏面,這個項目爲手機屏幕在橫屏的時候,提供了一個指定的layout:

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

默認的layout是針對豎屏的。

如果你還想要針對large規格的手機,提供在豎屏的時候的一個特殊layout,那麼這個layout目錄需要加2個修飾符:

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以及之上的版本,提供了一種更加高級的方法來定義屏幕的規則,它允許你根據與density無關的最小的屏幕像素寬度和高度,來指定不同的資源給不同的規格的屏幕。這一節裏面我們不講這個新的技術,想要了解更多,請閱讀:Designing for Multiple Screens.

創建不同的Bitmap

你應該爲廣義上的四種density:low,medium,high,extar-high提供合適縮放比例的bitmap資源。這麼做可以讓的你app在屏幕上表現出非常好的圖形效果和屏幕展現。

你可以利用原始的矢量圖來創建你需要針對不同density的縮放比例的圖片,一般我們使用如下的縮放比例:

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

這個意思是說爲xhdpi的設備,你要製作一張200*200的圖片,同理的你需要爲其他的density分別製作的圖片規格爲: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的時候,系統都根據屏幕的density選取不同的圖片。

注意:對伊low-density的資源並不是必須定義的。當你提供了hdpi的資源的時候,系統在low-density的屏幕下,會自動的把hdpi裏面的資源圖片規格縮放到原來的一半,來適應low-density的屏幕。

查看更多app icon創建的指導,請閱讀:Iconography design guide.

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