Android開發屏幕適配方案

Android屏幕適配方案總結



 日常開發中,難免遇到屏幕適配的方案,網上也有很多方案,在這裏本人只是做一個總結,以免日後使用

單位的概念

  • pt(point):磅,一個標準的固定長度單位,大小爲1/72英寸,主要用於印刷與平面設計。1英寸=2.54釐米=72磅 1pt=0.03527cm

  • px(pixel):像素,組成屏幕圖像的最小點,一個相對大小單位。同尺寸屏幕中像素越小越多,代表屏幕分辨率越高,反之越高。

    1pt=(ppi/72)*px

  • 屏幕尺寸(screen size):屏幕物理尺寸,指屏幕對角線的長度,而不是屏幕的長度或高度。單位爲英寸,4英寸、5寸手機……
    Android把所有的屏幕大小分爲四種尺寸:小、普通、大、超大(分別對應small、normal、large、extra large)

  • 分辨率(Resolution):屏幕擁有像素的總數以及屏幕水平(寬)和垂直(高)方向的像素數量。

  • ppi(pixels per inch):屏幕密度,指的是每英寸所擁有的像素數/每英寸像素。ppi數值越高,既代表顯示屏能夠以越高的密度顯示圖像。顯示的密度越高,擬真度就越高。
    這裏寫圖片描述

  • dpi(dots per inch):印刷計數單位,指每英寸所能印刷出來的網點數。衡量打印機打印精度的主要參數之一,值越大,表明打印機打印精度越高。電子屏上ppi=dpi

  • dp(Density-independent Pixels):與屏幕無關的像素單位。Android開發虛擬單位,在每英寸160點的顯示器上,1dp=1px;

  • sp(Scale-independentPixels):Android字體大小虛擬單位。在每英寸160點的顯示器上,當文字大小爲100%的時候,1sp=1px。如果字體設置爲sp,字體可以根據系統大小調節而變化。

    不同屏幕間轉換

這裏寫圖片描述

適配方案

  • 文件夾目錄不同資源適配
    1、建立對應屏幕分辨率的文件夾,例如屏幕分辨率爲540*960則可以建立對應資源文件夾values-960x540,這樣就會根據分辨率進行讀取對應的文件信息。

    2、考慮橫屏和豎屏佈局效果:Android有Layout-port和layout-land兩個目錄分別放置豎屏和橫屏的兩種佈局文件,在手機屏幕發生轉變,會自動調用相應佈局文件。

    3、適配大屏幕,有些時候需要考慮類似平板的的屏幕進行適配,可以吧xml佈局文件放到layout-large文件夾下,此文件夾的命名要和layout下佈局一樣,在屏幕要超過7寸的屏幕會自動讀取large下的文件。(注意:在android3.2之前的版本試用)

    4、在android3.2之後的版本可以使用layout-sw600dp文件夾,sw是small width的簡稱,見名知意就是最小寬度的意思。這個文件夾的使用規則和layout-large一樣,的那是這裏代表寬和高的最小邊爲600dp的佈局,也就是600dp以上的屏幕。

    5、佈局別名:有時候在sw600dp文件和large文件夾或者多個文件夾下都需要進行維護佈局文件,這時候我們同樣寫兩份代碼有點多餘,此時需要對佈局進行設置別名來維護共同的一套。在layout下可以只有2個文件一個是小屏幕默認的如:main.xml,另一個是大屏幕如:main_large.xml。之後再values下配置別名,
    默認的:values/layout.xml
    最少寬度600dp:values/layout-sw600dp/layout.xml 代碼如下
    3.2之前大於7寸的:values/layout-large/layout.xml 代碼如下

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <item name="main" type="layout">@layout/main_large</item>
</resources>
  • 編寫xml時的適配
    1、儘量使用wrap_content、match_parent、和weight。這樣佈局就會自動擴充。比如weight權重,用的時候可以按照比例進行分配,就不會出現顯示不全等現象。

    2、使用相對佈局,由於RelativeLayout是根據位置進行控制,所以我們可以選擇對應的參照物,例如一個按鈕設置在父佈局的右邊,這樣的話這樣的話,無論父佈局無論是多寬或者多高,這個按鈕都在父佈局的右邊。

  • 圖片與資源的適配
    1、我們可以適配不同的values,可以設置多份屏幕都 dimens文件,因爲在720的屏幕上1dp等於2px到1080屏幕上就等於3px,所以我們可以根據不同的dimens設置不同的px或者dp的值在dimens文件中。

    2、切不同尺寸的圖進行適配。可以感覺umeng進行查看目前市場上最主流,用的最多的手機屏幕的信息,切對應的套圖也是最常用的適配方式。但是圖片也不建議過多,因爲這樣會對apk包的大小有影響。我們可以把這些圖片進行壓縮,順便介紹一個壓縮的工具網站,親測效果還是不錯的。

    順便推薦一個壓縮圖片的工具網站,效果不錯哦!

    3、9patch圖片的使用,我們稱之爲點9,這個工具就在sdk下面,網上教程一大堆我就不敘述了。

  • 代碼中進行適配

    1、我們在自定義控件中,可以根據代碼獲取到當前的屏幕密度,然後對空間的大小進行設置,這樣的話設置的代碼就是動態計算寬度和高度的。如我們用畫筆花的字體,會在不同分辨率上呈現不同的大小,這時候可以通過獲取分辨率然後計算出我們要設置的寬度和高度。
    
    2、其實在寫代碼時候經常會遇到在代碼中計算的情況,例如我彈出一個單選框,需要動態設置高度,如果寫死一個高度的話會對不同的選項有問題。
    

    這裏寫圖片描述
    這裏寫圖片描述

這樣的話可以通過設置LayoutParams進行動態設置一個空間的寬、高等其他的屬性進行動態適配。

  • 其他適配以後想到的會繼續不斷的補充。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章