詳解Android應用如何匹配不同的手機分辨率

從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)在使用佈局的時候儘量使用權重,可以有效減少死數據的使用,降低適配的工作量。

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

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