Android之解析度適配
Android裝置的多樣化導致的螢幕解析度適配問題一直是Android開發中讓人頭疼的問題。
一、螢幕尺寸(screen size)
螢幕尺寸的大小是按照螢幕對角線的長度測量的,以英寸為單位。
比如:4英寸的螢幕就表示螢幕的對角線長度為4英寸,1英寸=2.54厘米,4英寸=4*2.54厘米=10.16厘米。
實際上,這種方法適用對象不僅僅包括手機螢幕,還包括電腦顯示器、電視螢幕等。
附註:市面上,Android裝置的螢幕尺寸是五花八門,這就導致了本文所介紹的問題。
二、解析度(image resolution)
手機上任何畫面都是由一個個小點組成的,這些小點就是所謂的像素點。一塊方形的螢幕橫向與豎向含有的像素點的乘積即所謂的解析度,比如,我們通常所的1024*768,或者數位相機中的xxx萬像素就是這個乘積。
經常會看到的指標是螢幕比率是4:3、16:9、5:4等,其實就是橫向像素點與豎向像素點的比值,比如:1024:768。
解析度還有類似於1080p(即解析度為1920*1080像素)之類的說法,其實這裡的p就是progressive scan,即漸進式掃描。
通常實際螢幕畫面顯示效果取決於螢幕尺寸與解析度之間的關係,即螢幕大小一定的情況下,解析度越大,顯示效果越細膩,解析度不變,螢幕越小,顯示效果越細膩。
三、螢幕密度(screendensity)
螢幕密度即像素密度(pixels per inch)是基於螢幕解析度定義的,即每英寸螢幕所擁有的像素點數。
像素密度=(長度像素^2+寬度像素^2)開平方/螢幕尺寸
以解析度為1280*720和螢幕尺寸為6英寸為例,螢幕密度約等於245。
Android支援三種類別的螢幕密度,即低(ldpi)、中(mdpi)、高(hdpi),這三種密度的區別在於螢幕中每英吋像素點的多少。預設情況下,Android瀏覽器和WebView是針對中密度螢幕設計的,在高密度螢幕上將Web頁面縮放約1.5倍,而在低密度螢幕上縮放0.75倍。
四、裝置像素比(devicePixelRatio)
裝置像素比=物理像素/裝置獨立像素
物理像素這裡可以認為就是解析度。
裝置獨立像素(device independent pixels, dip或dp),與螢幕密度有關。
在螢幕密度為160的顯示屏上,1dip=1px,即一個裝置獨立像素等於一個像素,換句話說160dpi是標準的,即此時裝置像素比為1。如果你的螢幕解析度很大,但螢幕密度沒有正確設定,那麼使用dip顯示圖片就會顯示過小,dip與像素的換算關係如下:
dip(value) =(int)(px(value)/1.5 + 0.5)
Android上的螢幕密度通常為120dpi、160dpi、240dpi、320dpi,對應於Android工程中的檔案夾分別為drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi,即同一張圖片的尺寸在這幾個檔案夾中的比例為3:4:6:8。
為了盡量自適應各種螢幕最好用dp為單位,或者拿px乘以裝置像素比來作為實際像素。