Android開發中,經常要使用dp做為度量單位,為什么不直接使用px呢?
首先要了解幾個基本概念
Screen Size
: 屏幕尺寸,根據對角線度量,一般單位是英寸
英寸
: 1英寸=2.54厘米
px
: 像素,屏幕顯示的內容是由一個個點組成的,每一個點就是一個像素
Screen density
: 屏幕密度,度量屏幕上一塊物理區域中像素的個數多少,通常用dpi(dot per inch)作為單位,這里的點指像素??梢钥闯?,像素的絕對大小是不定的,密度越高,每一像素所占的面積就越小。
Resolution
: 分辨率,通常所說的1080p,800X400指的就是分辨率,這里的數字指的是每個dimension上像素的個數。
了解了以上知識,就可以解釋dp這個概念了。
dp是density-independnt pixel的縮寫。字面上解釋就是與像素密度(就是前面的Screen density)無關。
那么什么是與像素密度無關呢,為什么要用dp,而不直接使用px呢?
假如有這種情況,一個icon是50X50px,一塊4英寸大的屏幕,分辨率為100X100px,那么,這個icon將占屏幕的1/4,如果分辨率為200X200,則占1/16. 可見,一塊4英寸的屏幕,只因屏幕密度的不同,最終顯示效果差距很大。這樣會給用戶體驗帶來很大的負效應。
如果icon的大小(指以像素為單位)能隨著屏幕密度的變化自動調整,不就好了么?屏幕密度變大,icon也跟著變大。
這就是dp的作用。
因為icon最終要繪制到屏幕上,所以最終還是以px為度量單位,只是在此之前需要一個轉化過程
px = dp * (dpi / 160)
可見,當dpi變大時,px可同比例變大。至于為什么是160,只是選的一個基準,在dpi=160的情況下,dp的大小是和px等同的。