Android全面的屏幕適配方案解析(二)__寬高限定符屏幕適配

上一篇把屏幕適配相關的概念梳理了一下,主要也是爲了能更好的理解後面內容,那從這篇開始就要講解適配方案啦,沒看第一篇的可以先看這篇:
Android全面的屏幕適配方案解析(一)__屏幕適配概念梳理
Android全面的屏幕適配方案解析(二)__寬高限定符屏幕適配
Android全面的屏幕適配方案解析(三)__sw限定符適配方案
Android全面的屏幕適配方案解析(四)__今日頭條適配方案

下面列舉常用的適配方案:

  • dp適配方案
  • 寬高限定符適配方案
  • AndroidAutoLayout適配方案
  • sw限定符適配方案
  • 今日頭條適配方案
  • AndroidAutoSize適配方案

看到這有些童鞋可能就要問了,爲啥有些過時的適配方案這裏還講解啊,只能說每種適配方案都會有各自的優缺點,從最原始的適配方案講起,才能更好的理解爲啥會衍生出各種適配方案,話不多說,直接開幹吧!

1、dp適配方案

衆所周知,在開發過程中標識尺寸的時候,Android並不推薦使用px這個真實像素單位,因爲相同尺寸在不同分辨率的手機顯示效果各不相同,如下爲圖片寬高爲250x250(px),在分辨率:480x800、720x1280、1080x1920的顯示效果圖:

出現類似於上圖這樣的效果,整體的佈局效果可能會變形,所以px這個單位在佈局文件中是不推薦的。

相對應的Android推薦使用dp作爲尺寸單位來適配UI,之前我們講過,dp爲密度無關像素,與終端上的實際物理像素點無關,可以保證在不同屏幕像素密度的設備上顯示相同的效果。

下面還是根據實例來說明一下,如下爲圖片寬高爲250x250(dp),在分辨率:480x800、720x1280、1080x1920的顯示效果圖:

從效果圖可以看出,寬高250dp在不同分辨率手機整體的佈局效果差異並不大,爲啥會這樣呢?

我們知道同樣尺寸在不同分辨率的設備,每1dp所代表的像素數量是不一樣的,如表格所示:

由表格可以看出,在480x800、720x1280、1080x1920的手機,dpi是不同的,這也是說,1dp在這些不同分辨率的手機中,分別對應的1.5px、2px、3px,這樣當我們用dp作爲控件大小單位的時候,在不同分辨率的手機上看到的大小一樣,此時各手機上顯示的比例也就一致啦。

以上的適配方式,通過dp再加上自適應佈局和weight比例佈局可以基本解決不同手機上適配的問題,這基本上就是最原始的Android適配方案。

那這種方案有沒缺點呢?

自然是有的,不然也不會推出這麼多的適配方案,那我們來看看有啥缺點。

我們知道Android之所以碎片化這麼嚴重,跟Android系統、屏幕尺寸、屏幕密度的碎片化有很大的關係,而手機廠商生產的手機設備也並沒有按照屏幕尺寸、分辨率和像素密度的關係規則來實現,比如屏幕分辨率1080x1920,屏幕尺寸爲5,那麼dip爲440,假如UI設計圖按屏幕寬度爲375dp設計,那麼這樣會存在啥問題呢?

根據上述描述,我們可以通過計算出屏幕寬度爲:1080/(440/160) = 393dp,也就是說實際的屏幕寬度是比設計圖的要寬的,那這樣即使用dp爲單位也無法跟其它設備顯示同樣的效果,這就需要通過估算或者設定規範值等等進行換算設置,這也就需要我們耗費精力去轉換尺寸,這會極大降低開發效率。

2、寬高限定符適配方案

所謂的寬高限定符適配就是窮舉市面上所有的Android手機的寬高像素值,不過需要先設定一個基準,然後其它分辨率根據這個基準做適配,如圖所示:

那什麼叫設定一個基準呢?

比如設定320x480的分辨率爲基準,那麼:

基準寬度爲320,即將任何分辨率的寬度分爲320份,取值爲x1到x320。

基準長度爲480,即將任何分辨率的長度分爲480份,取值爲y1到y480。

那麼該基準尺寸編寫對應的dimens文件爲:

那什麼又叫其它分辨率根據這個基準做適配呢?

比如拿480x800分辨率的手機來說,需要在項目中values-800x480目錄下的dimens.xml文件中的如下設置,如圖所示:

那麼這份數據是怎麼計算得到的呢,那當然是在基準分辨率的基礎上計算得到的,以下爲寬度x演示即:

x1=(480/基準)1=(480/320)1=1.5px

x2=(480/基準)2=(480/320)2=3px

...

x320=(480/基準)320=(480/320)320=480px

同理長度y計算也是一樣的。

這個時候有童鞋又說了,市面上我怎麼知道有多少分辨率的手機啊,就算知道所有分辨率,每個這麼計算不得寫廢了啊,淡定哈,這些都是可以通過工具自動生成,這得感謝鴻洋大佬提供的生成工具。

1、分析需要的支持的分辨率

對於主流的分辨率已經集成到程序裏了,對於比較特殊的可以通過參數指定,而關於屏幕分辨率信息,可以通過該網站查詢:點擊這裏跳轉

2、自動生成文件的程序地址

點擊這裏跳轉獲取自動生成程序

這裏提供了個jar包,默認情況下,雙擊即可生成,如圖所示:

這裏默認內置了常用的分辨率,默認基準爲480*320,對於特殊需求,可以通過命令行指定即可,比如我想以分辨率1280 * 800爲基準 ,並且額外支持尺寸:1152 * 735;4500 * 3200,如圖所示:

格式如下:

java -jar xx.jar width height width,height_width,height

最後自動生成文件如圖所示:


這樣就更改了默認的基準,還添加了額外支持的分辨率。

使用這種適配方案,可以按照UI設計稿的尺寸爲基準分辨率,這時運行在不同分辨率的手機中,這些系統會根據這些dimens引用去該分辨率的文件夾下面尋找對應的值,這樣基本解決了我們的適配問題,而且極大的提升了我們UI開發的效率。

那這種方案有沒缺點呢?當然也是有的

  • 最明顯的肯定就是佔用資源大,會增加APK的體積
  • 容錯機制大,需要精準命中資源文件才能適配,比如1920x1080的手機就一定要找到1920x1080的限定符,否則就只能用統一的默認的dimens文件了。而使用默認的尺寸的話,UI就很可能變形。

爲了防止篇幅過長,這裏就先介紹兩種適配方案,後面幾種後面會一一解析,敬請期待,歡迎關注公衆號【龍旋】能獲取最新更新內容哦。

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