Android - 支持不一樣的設備 - 支持不一樣的屏幕

Android - 適配不一樣分辨率的設備

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屏幕

相關文章
相關標籤/搜索