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 |
圖一,完美的闡述了安卓解析度之多,且寬高比率不一致的問題,
圖二,完美的闡述了安卓解析度的適配方案。
關於安卓手機解析度尺寸各有不同,為了支援多種螢幕,給大家推薦三種適配方案:
(以上三種方案可以根據專案實際情況相結合使用)
這裡主要說下第二種方案和第三種方案的原理:
第二種方案,其實就是通過一系列演算法去計算每個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目錄下新建預設解析度。