屏幕適配那點事


前言
做移動開發很定要碰到適配問題,過去android需要,現在ios也需要,今天來談談Android機型上一般適配問題該如何處理。

在Android適配的主要是因為眾多的手機型號,尺寸分辨率大家都不統一,就目前已經出現的可以分為LDPI, MDPI, HDPI, XHDPI, XXHDPI, XXXHDPI,這個區分很簡單不是看手機屏幕尺寸而是看dpi,也就是像素密度。

Android以MDPI作為基准,那么眾多dpi之間的關系是這樣的


devices_displays_density@2x.png

所以如果公司用MDPI的設計圖為標准,那么在適配HDPI時,需要的圖片資源一般是1.5倍長寬,注意.9圖除外,我們通常把.9圖和xml drawable都作為是全分辨率的資源單獨放在res/drawable下面,其他的圖片按照dpi對應放到res下面的drawable-mdpi, drawable-hdpi, drawable-xhpi, drawable-xxdpi,細心的你也許會發現剛剛不是說了還有LDPI么,為什么沒有對應的文件夾,其實是這樣的,Android建議我們不要單獨設計ldpi的資源圖片,系統會自動把最接近hdpi的圖片縮放作為ldpi設備的資源,具體策略是這樣的:HDPI的資源縮小到原來的1/2,所以ldp相對mdpi的比例關系是0.75,所有的dpi之間的關系都用整整數表示的話關系就是1:2:3:4:6:8,由於通常不考慮ldpi,所關系又可以寫成2:3:4:6:8.

之前講的這些關系都反應在圖片之前的px關系,現在我們拋開圖片px大小,在編碼的時候,我們一般說的大小就是dp和sp,dp指的是長寬,sp指的是字體來說。

我們已經知道mdpi是android的基准,自然容易想到dp就是mdpi而言的,所以一個48x48dp的圖片在mdpi下面對應48x48px,在hdpi下對應72x72px,依次類推我就不寫了。

寫到這我們基本把手機適配的本質講完了,下面接着講一下如何確定某款機型屬於哪個范疇,如上圖基本上160dpi,240dpi,320dpi,480dpi,640dpi,這些數字可以有一定的浮動,只要是響應指的左右都算是該dpi的,如果經驗豐富熟悉個種手機,你可以很快知道一般720x1280的對應的是xhdpi,480x800或854對應的是hdpi,當然如果你不知道也沒問題,可用代碼來檢車某款手機的dpi,

手機的屏幕參數信息都封裝在DisplayMetrics里面,我們可以這樣獲取

float density = getResources().getDisplayMetrics().density;

int dpi = getResources().getDisplayMetrics().densityDpi;

int widthpx = getResources().getDisplayMetrics().heightPixels;

int heightpx = getResources().getDisplayMetrics().widthPixels;

Log.d("DPI", "density=" + density + ", dpi=" + dpi + ", widthpx=" + widthpx + ", heightpx=" + heightpx);

這樣執行完畢我們可以清楚的知道這些重要的信息,比如huawei P6的參數應該是這樣的:DPI﹕ density=2.0, dpi=320, widthpx=1184, heightpx=720

上面這些事必須掌握的適配知識,但是光靠dpi並不能解決所有適配問題,比如你有一個pad,尺寸很大有7inch,但是分辨率去很低只有480x800,這種情況就需要另外考慮,應為他的dpi實際是很低的,但是顯示空間又大,如果直接用手機上顯示的資源布局,那么一定會看起來非常的模糊,所以一般針對pad我們可能會需要專門的布局來利用大空間,比如在手機上我們是單頁的,在pad上可以用左右兩頁同時顯示,最經典的就是gmail,左側標簽欄,右側信息detail。那這樣做的目的無非就是說讓本來顯示48dp的東西在pad上不那么顯示,重新調節到合適的大小,既不顯得過大模糊,又充分利用了布局。

還有一些零碎的適配技巧就需要在開發中具體問題具體分析了,That's all.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM