Android中 dp,px,dpi三者之間的關係
在程序運行時,系統根據屏幕的實際密度透明的處理任何需要縮放的設備獨立像素單元,設備獨立像素轉換成屏幕實際像素的換算很簡單:px = dp * (dpi/ 160). pixls=160*(320/160)對這個公式解釋:
例如:屏幕的物理尺寸爲1.5英寸x2英寸,屏幕分辨率爲240x320,則我們可以計算出在這部手機的屏幕上,每英寸包含的像素點的數量爲240/1.5=160dpi(橫向)或320/2=160dpi(縱向),Android API 說,如果屏幕密度爲160,這時dp和px是一樣的。1dp=1px; 例如 有一張定義爲“100dp”的圖片,在像素密度中(160dpi,也就是說240*320)手機上實際顯示100px,如果你換成高(240dpi)上,那麼就會顯示 240/160 *100=150px
如果你把圖片定義爲 “100px”,在像素密度中(160dpi)顯示是一樣的,如果換高(240dpi),它每英寸放的像素的數量多,只用圖片長度的一半就把一張圖片放下了,看起來就短了一半,所以通常用dp附加API:
The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, which is the baseline density assumed by the system for a "medium" density screen.
總結:drawable-xhdpi 1dp=2px drawable-hdpi 1dp=1.5px drawable-mdpi 1dp=1px drawable-ldpi 1dp=0.75px
sp:與縮放無關的抽象像素(Scale-independent Pixel)。sp和dp很類似但唯一的區別是,Android系統允許用戶自定義文字尺寸大小(小、正常、大、超大等等),當文字尺寸是“正常”時1sp=1dp=0.00625英寸,而當文字尺寸是“大”或“超大”時,1sp>1dp=0.00625英寸。類似我們在windows裏調整字體尺寸以後的效果——窗口大小不變,只有文字大小改變。
原文鏈接:http://www.eyeandroid.com/thread-14341-1-15.html