最近在學習Android開發,一直沒有弄清楚px,dp,dip,sp的區別。今天正好有時間,就花時間研究了一下。
眾所周知,Android廠商非常多,各種尺寸的Android手機、平板層出不窮。導致了Android生態環境的碎片化現象越來越嚴重。Google公司為了解決分辨率過多的問題,在Android的開發文檔中定義了px,dp,dip,sp,方便開發者適配不同分辨率的Android設備。
1.基礎知識:
mm:millimeters 毫米,長度單位。
in:inches 英寸,長度單位,屏幕物理尺寸大小的基本單位。
pt:points 一個標准單位,大小為一英寸的屏幕大小的1/72。
dpi: dots per inch 即每英寸的像素點。
舉個例子:
假設QVGA(320*240)分辨率的屏幕物理尺寸是(2英寸*1.5英寸),那麼這部手機的dpi=160。
Screen size(屏幕尺寸)指的是手機實際的物理尺寸。
如iPhone4S是3.5英寸,這裡指的是手機屏幕對角線的長度是3.5英寸。
Resolution(分辨率)指手機屏幕橫、豎方向像素個數。
常見的手機分辨率:QVGA(240×320像素),HVGA(480×320像素),WVGA(800×480像素),720P(1280x720像素),1080P(1920x1080像素),2K(2560x1440像素)
2.基本定義:
px (Pixel的縮寫,即像素) 是指一個像素。
sp (scale-independent pixels)是指比例獨立像素。
dip (device independent pixels)是指設備獨立像素。
dp:(Density-independent pixel)在Android文檔中(http://developer.android.com/guide/practices/screens_support.html#terms),它的計算方法是:px = dp * (dpi / 160)。
看一下dp的單位是什麼:像素 = dp的單位 * 像素/英寸 。可以看出dp的單位是長度單位英寸。1dp的長度 = 1 * dpi / 160 * 1 / dpi 英寸 = 1 / 160 英寸 。
dp的意義是:你可以根據看到的實際大小,在應用中設置對應的dp值,而使得不同的設備上看起來一樣大。
3.不同之處
px(像素)表示屏幕的真實像素,比如現在流行的1080P手機和2K手機,1080P手機就是1920x1080像素,也就是說這個手機的屏幕橫向有1080個像素,縱向有1920個像素。這個值是絕對的,是多少就是多少,不會改變。
sp(比例獨立像素),也就是說是與密度和字體縮放度無關的像素,主要用於字體的大小。
dip(設備獨立像素)這個是邏輯像素單位,其實就是dp。