Android應用如何匹配不同的手機解析度

來源:互聯網
上載者:User

標籤:android應用如何匹配不同的手機解析度

從android sdk提供的協助文檔中,我們可以看到各種手機的解析度和對應的屏大小:QVGA (240x320),WQVGA400(240x400),WQVGA432 (240x432),HVGA (320x480),WVGA800 (480x800),WVGA854 (480x854)。
然而,由於解析度的不同,可能會導致同一布局對應不同解析度的手機顯示出不同的效果,如布局錯位、圖片虛化等,那麼,如何解決這一問題呢? 
一、對於介面布局方面
1、根據物理尺寸的大小準備5套布局layout:
(1)layout(放一些通用布局xml檔案)  從android sdk提供的協助文檔中,我們可以看到各種手機的解析度和對應的屏大小:QVGA (240x320),WQVGA400(240x400),WQVGA432 (240x432),HVGA (320x480),WVGA800 (480x800),WVGA854 (480x854)。
然而,由於解析度的不同,可能會導致同一布局對應不同解析度的手機顯示出不同的效果,如布局錯位、圖片虛化等,那麼,如何解決這一問題呢? 
    一、對於介面布局方面
     1、根據物理尺寸的大小準備5套布局layout:
     (1)layout(放一些通用布局xml檔案)
     (2)layout-small(螢幕尺寸小於3英寸左右的布局)
     (3)layout-normal(螢幕尺寸小於4.5英寸左右)
     (4)layout-large(4英寸-7英寸之間)
     (5)layout-xlarge(7-10英寸之間)
     2、根據需求配置不同的布局layout。
       如:240x320,則建立layout-320x240;400x800,則建立layout-800x400。需要注意的是:大的寫在前面,例如320,小的寫在後面,例如240;還有乘號要寫成小寫x,不能寫成*。
       另外,如果是通用的布局檔案,則放在layout下。
 
     最後需注意:對於介面布局方面的解析度的匹配需要在AndroidManifest.xml裡面添加下面一段,沒有這一段自適應就不能實現:
                         </application>
                               <supports-screens
                                    android:largeScreens="true"
                                    android:normalScreens="true"
                                    android:smallScreens="true"
                                    android:xlargeScreens="true"
                                    android:anyDensity="true"/>
                </manifest>
       在</application>標籤和</manifest> 標籤之間添加上面那段代碼即可。注意:由於android版本的不同,有些版本不支援xlargeScreens,可以直接將android:xlargeScreens="true"去掉。
     注釋:android:anyDensity=["true" | "false"]
     如果android:anyDensity="true",指應用程式支援不同密度,會根據螢幕的解析度自動去匹配。
     如果android:anyDensity="false",應用程式支援不同密度,系統自動縮放圖片尺寸和這個圖片的座標。具體解釋一下系統是如何自動縮放資源的。例如我們在hdpi,mdpi,ldpi檔案夾下擁有同一種資源,那麼應用也不會自動地去相應檔案夾下尋找資源,這種情況都是出現在高密度,以及低密度的手機上,比如說一部240×320像素的手機,如果設定android:anyDensity="false",Android系統會將240 x 320(低密度)轉換為 320×480(中密度),這樣的話,應用就會在小密度手機上載入mdpi檔案中的資源。
 
    二、圖片資源方面
     1、需要根據dpi值準備5套圖片資源:
      (1)drawable:主要放置xml設定檔或者對解析度要求較低的圖片
      (2)drawalbe-ldpi:低解析度的圖片,如QVGA (240x320)
      (3)drawable-mdpi:中等解析度的圖片,如HVGA (320x480)
      (4)drawable-hdpi:高解析度的圖片,如WVGA (480x800),FWVGA (480x854)
      (5)drawable-xhdpi:至少960dp x 720dp(一般比較少用)
       Android會有自動匹配機制去選擇對應的布局和圖片資源,系統會根據機器的解析度來分別到這幾個檔案夾裡面去找對應的圖片。
    三、動態實現的介面,樣式的設定(values方面)
        不同解析度,介面的字型大小,字型等需要不同的樣式,且需要動態產生的情況下,需要把不同解析度的配置資訊儲存到應用中。
      舉例:在RES裡建立 values-480x320 values-800x400
           並在建立的檔案夾中分別建立string.xml
           <dimen name="Text_size">30px</dimen>
           在程式中直接調用R.dimen.Text_size
 
    最後,做一下總結:
    (1)不要使用AbsoluteLayout布局,盡量使用RelativeLayout和LinearLayout;   
    (2)在使用布局的時候盡量使用權重,可以有效減少死資料的使用,降低適配的工作量。
(2)layout-small(螢幕尺寸小於3英寸左右的布局)
(3)layout-normal(螢幕尺寸小於4.5英寸左右)
(4)layout-large(4英寸-7英寸之間)
(5)layout-xlarge(7-10英寸之間)
2、根據需求配置不同的布局layout。
如:240x320,則建立layout-320x240;400x800,則建立layout-800x400。需要注意的是:大的寫在前面,例如320,小的寫在後面,例如240;還有乘號要寫成小寫x,不能寫成*。
另外,如果是通用的布局檔案,則放在layout下。

最後需注意:對於介面布局方面的解析度的匹配需要在AndroidManifest.xml裡面添加下面一段,沒有這一段自適應就不能實現:
</application>
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true"
android:anyDensity="true"/>
</manifest>
在</application>標籤和</manifest> 標籤之間添加上面那段代碼即可。注意:由於android版本的不同,有些版本不支援xlargeScreens,可以直接將android:xlargeScreens="true"去掉。
注釋:android:anyDensity=["true" | "false"]
如果android:anyDensity="true",指應用程式支援不同密度,會根據螢幕的解析度自動去匹配。
如果android:anyDensity="false",應用程式支援不同密度,系統自動縮放圖片尺寸和這個圖片的座標。具體解釋一下系統是如何自動縮放資源的。例如我們在hdpi,mdpi,ldpi檔案夾下擁有同一種資源,那麼應用也不會自動地去相應檔案夾下尋找資源,這種情況都是出現在高密度,以及低密度的手機上,比如說一部240×320像素的手機,如果設定android:anyDensity="false",Android系統會將240 x 320(低密度)轉換為 320×480(中密度),這樣的話,應用就會在小密度手機上載入mdpi檔案中的資源。

二、圖片資源方面
1、需要根據dpi值準備5套圖片資源:
(1)drawable:主要放置xml設定檔或者對解析度要求較低的圖片
(2)drawalbe-ldpi:低解析度的圖片,如QVGA (240x320)
(3)drawable-mdpi:中等解析度的圖片,如HVGA (320x480)
(4)drawable-hdpi:高解析度的圖片,如WVGA (480x800),FWVGA (480x854)
(5)drawable-xhdpi:至少960dp x 720dp(一般比較少用)
Android會有自動匹配機制去選擇對應的布局和圖片資源,系統會根據機器的解析度來分別到這幾個檔案夾裡面去找對應的圖片。
三、動態實現的介面,樣式的設定(values方面)
不同解析度,介面的字型大小,字型等需要不同的樣式,且需要動態產生的情況下,需要把不同解析度的配置資訊儲存到應用中。
舉例:在RES裡建立 values-480x320 values-800x400
並在建立的檔案夾中分別建立string.xml
<dimen name="Text_size">30px</dimen>
在程式中直接調用R.dimen.Text_size

最後,做一下總結:
(1)不要使用AbsoluteLayout布局,盡量使用RelativeLayout和LinearLayout; 
(2)在使用布局的時候盡量使用權重,可以有效減少死資料的使用,降低適配的工作量。

原文來自http://blog.sina.com.cn/s/blog_8a30865f0101j2wd.html


Android應用如何匹配不同的手機解析度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.