1. 程式人生 > >android解析度適配

android解析度適配

轉載請註明出處:https://blog.csdn.net/u011038298/article/details/83269208

解析度 高度 寬度 寬高比(寬/高)
1920x1080 1920 1080 0.5625
2094x1080 2094 1080 0.5157593123
2220x1080 2220 1080 0.4864864865
1280x720 1280 720 0.5625
2392x1440 2392 1440 0.602006689
2560x1440 2560 1440 0.5625
1776x1080 1776 1080 0.6081081081
2030x1080 2030 1080 0.5320197044
2118x1080 2118 1080 0.5099150142
2076x1080 2076 1080 0.5202312139
568x320 568 320 0.5633802817
800x480 800 480 0.6
854x480 854 480 0.5620608899
960x540 960 540 0.5625
1184x720 1184 720 0.6081081081
1208x720 1208 720 0.5960264901
1280x800 1280 800 0.625
1280x768 1280 768 0.6
1176x1080 1176 1080 0.9183673469
1800x1080 1800 1080 0.6
1812x1080 1812 1080 0.5960264901
1920x1152 1920 1152 0.6
1920x1200 1920 1200 0.625
2160x1080 2160 1080 0.5
2208x1080 2208 1080 0.4891304348
2240x1080 2240 1080 0.4821428571
2244x1080 2244 1080 0.4812834225
2280x1080 2280 1080 0.4736842105
2560x1312 2560 1312 0.5125
2560x1600 2560 1600 0.625
2960x1400 2960 1400 0.472972973

圖一,完美的闡述了安卓解析度之多,且寬高比率不一致的問題,

圖二,完美的闡述了安卓解析度的適配方案。

關於安卓手機解析度尺寸各有不同,為了支援多種螢幕,給大家推薦三種適配方案:

1.googe開源百分比佈局

2.動態適配各個螢幕解析度      

3.靜態適配各個螢幕解析度(XML自動生成工具)

(以上三種方案可以根據專案實際情況相結合使用)

 

這裡主要說下第二種方案和第三種方案的原理:

第二種方案,其實就是通過一系列演算法去計算每個view在使用者手機螢幕中應該的寬高,從而達到一個適配效果;

第三種方案,原理大致簡單的說一下吧,每個公司都有自己的UI設計師,通常設計師會在一個螢幕尺寸上作圖,例如設計師在1280x720上作圖,那麼我們在android專案工程的res目錄下新建資料夾values-1208x720,另外再新建兩個檔案dimens_width.xml和dimens_height.xml用來存放寬度和高度。

   

我們可以看到,name-value的一一對應關係,所以UI設計師在1280x720尺寸上作圖時,如果效果圖上標註控制元件的寬是4px,高是2px,那麼我們引用 android:layout_width="@dimen/width4px"   android:layout_height="@dimen/height2px"  就可以達到完美的適配效果。那麼問題來了,它在1920x1080解析度上的尺寸怎麼辦呢?使用“靜態xml適配各個螢幕解析度”來解決此問題,它會自動生成相對應的尺寸大小至values-1920x1080目錄下。

上圖中我們可以看到,在values-1920x1080中,width4px對應的是6px,而height2px對應的是3px,是因為在生成靜態xml的時候就根據你的UI效果圖的基礎尺寸把其他解析度上的尺寸給適配好了,所以,還是那句話,我們引用 android:layout_width="@dimen/width4px"   android:layout_height="@dimen/height2px"  就可以達到完美的適配效果。

為了幫助大家更好的理解,我再舉個栗子,假設UI設計師有時候在720x1280上做效果圖,有時候在1080x1920上做效果圖,那該怎麼應用呢?UI設計師在哪個螢幕解析度上做標註,你就傳入哪個螢幕解析度目錄下跟UI設計師標註的相對應寬高的值所對應的資源名稱即可。

安卓裝置有數不盡的各種奇葩解析度,我們需要每個螢幕解析度都生成xml檔案嗎?不需要,你可以選取你們app使用者量排名前30的裝置來做解析度適配,然後另外也可以選取一些特定的解析度就可以了,因為即使使用者的裝置找不到與之相匹配的大小時,它還會向下尋找與它相近的資料夾解析度來取值,但是這裡要注意了,如果找不到與之匹配的大小時,向下也沒有宣告比這更小的解析度資料夾時,並且也沒有設定預設的解析度檔案時,它可能會無情的向你報一個錯:

Caused by: android.view.InflateException: Binary XML file line #13: Binary XML file line #13: You must supply a layout_width attribute

Caused by: java.lang.UnsupportedOperationException: Binary XML file line #13: You must supply a layout_width attribute.

以防萬一,我們還可以選擇在res/values目錄下新建預設解析度。