Android 開發者是如何解決不同解析度的兼容問題的?

市面上android的解析度參差不齊,設計一款app,既要考慮兼容性,也要考慮輕便性。一位前輩說可以設計所有解析度的,然後做一個自適應兼容版,但是這樣不會造成安裝包過大嗎?


不同屏幕比例:RelativeLayout(相對布局)

不同屏幕尺寸:Fragment(手機和平板使用不同UI)

不同解析度:分解析度使用圖片

最近對不同解析度的單色圖標有了最終解決方案——用字體文件顯示矢量圖標。

忘了說了,Android裡面,基本上所有的視圖尺寸單位都用dp、字體尺寸單位用sp,大多數情況下都可以應付。


Android結構工程師黛安·哈克本(Diane Hackborn)在Google+中描述了公司理念:

我們解決顯示屏解析度問題的動機來源於Palm/PalmSource體驗。Palm設備傳統上採用160x160顯示屏。最初,索尼推出320x320顯示屏,應用坐標只需擴大一倍即可,軟體人員仍能夠認為自己是在160x160的顯示屏上操作,操作系統通過轉換並利用高解析度顯示屏顯示更清晰的文本和繪圖。

但後來該策略在遭遇QVGA [320x240]顯示屏時出現問題。由於QVGA [320x240]顯示屏用於大量設備,其生產成本較低。將書寫區域放置在顯示屏底部,仍能夠獲得應用所需的預期空間。但其密度在160x160和320x320之間,縮放比例為1.5倍時,問題就出現了。

將目標尺寸縮放1.5倍,原來的實線將因實際顯示屏解析度不同而出現不同程度的暗淡斑點。為解決Android面臨的顯示屏尺寸和解析度挑戰,該操作系統採用密度獨立像素(其縮寫為dp或dip)方案。

Android針對顯示屏解析度提出的解決方案配合大量布局工具使用。Meridian Apps軟體人員尼克·法倫納(Nick Farina)在博客中稱:「一旦軟體人員掌握了布局工具,就能夠在布局時對肖像/平面設備方向及不同顯示屏尺寸進行自動調整。」

Android工程師羅曼·蓋伊(Romain Guy)指出:「如果你在應用中標出的按鈕為100像素的寬度,該按鈕在640x480像素設備中看起來較320x480像素設備中要小得多。現在,如果你對按鈕的寬度標為100dip,該按鈕尺寸在兩款設備上看起來是一樣的。」

基本上這就是Google給出的解決方案


1.不複雜的頁面可以直接用 ScrollView 套 LinearLayout 最簡單粗暴,否則一般最外面用 RelativeLayout 以獲得最大靈活性。

2.如果真有心適配各個解析度,在 /layout 下面可以按照 dpi 建立不同的文件夾,優化各屏幕下的布局。這一點可以參考 Supporting Different Screens

3.不同的解析度下所用到的圖片解析度/顏色也可能有不同。包括橫豎屏時也會有不同。(魅族Flyme 3.0的 Menu icon 在橫豎屏切換時用的就不是一套圖標)。因此需要對橫屏特殊處理的又可以把 selector 文件放到 res/drawable-land 下面。

4.腦子裡有「fragment」的 概念,盡量把界面切成塊用fragment寫。也方便手機/平板使用。

5.學會用 & 和 & 標籤

6.總是是很坑很坑很坑呢~~~~


去看看android源代碼裡面 packages/apps裡面的那些聯繫人之類的工程是怎麼做的就行了


高度,寬度用dp做單位,在各解析度上的顯示效果應該就是一樣的,參考官方指南 http://developer.android.com/guide/practices/screens_support.html


自適應兼容版 怎麼會做成安裝包過大? 所有的設計都是可拉伸元素 一個版本就可以了 可能icon之類的東西要多做幾個版本


由於安卓設備的機型多,配置不一,而且還有系統本身碎片化嚴重,所以會導致APP兼容性比較嚴重,往往會出現布局混亂、閃退、功能缺失、性能下降、啟動延遲等等問題。建議可以使用一些兼容測試工具測試下,查看統計結果,並對症下藥:http://www.ineice.com


推薦閱讀:

Android activity與fragment之間通信的好的方法有哪些?
學習android開發需要哪些基礎?
Google I/O 2017上推出的新 GC 演算法的原理是怎樣的?
安卓應用為什麼要在內部存儲留下這麼多文件?

TAG:解析度 | Android應用 | Android開發 | Android解析度 | Android |