android開發中,文字大小的單位是sp,非文字的尺寸單位用dp,但是我們在設計稿用的單位是px。這些單位如何換算,是設計師、開發者需要了解的關鍵.
簡單理解的話,px(像素)是我們UI設計師在PS里使用的,同時也是手機屏幕上所顯示的,dp是開發寫layout的時候使用的尺寸單位
為什么要把sp和dp代替px?原因是他們不會因為ppi的變化而變化,在相同物理尺寸和不同ppi下,他們呈現的高度大小是相同。也就是說更接近物理呈現,而px則不行
為了適應多分辨率的手機,理想的方式是為每種分辨率做一套設計稿,包括所用到的icon、設計稿標注等。但在實際開發中,這種方法耗時耗力。所以通常會選擇折中的方法
方法一:在標准基礎上(比如xhdpi)開始,然后放大或縮小,以適應到其他尺寸。不足之處是,對於更高分辨率的手機,圖標被放大后會導致質量不高。
方法二:以最高分辨率為基准設計,然后縮小適應到所需的小分辨率上。缺點是,圖標等若都最大尺寸,加載時速度慢且耗費流量較多,對於小分辨率的用戶也不夠好
PPI = Pixels per inch,每英寸上的像素數,即 "像素密度"
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (baseline)
- ldpi: 0.75
drawable-ldpi、drawable-mdpi、drawable-hdpi 精度分別為低、中(android默認)、高。
對應的圖片大小為:36x36、48x48、72x72。
xxhdpi: 144*144
xhdpi:96*96
hdpi:72*72
mdpi:48*48
ldpi:36*36
dp是虛擬像素,在不同的像素密度的設備上會自動適配,比如:
在320x480分辨率,像素密度為160,1dp=1px
在480x800分辨率,像素密度為240,1dp=1.5px
計算公式:1dp*像素密度/160 = 實際像素數
drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
(1)drawable-hdpi里面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi里面存放中等分辨率的圖片,如HVGA (320x480)
(3)drawable-ldpi里面存放低分辨率的圖片,如QVGA (240x320)
系統會根據機器的分辨率來分別到這幾個文件夾里面去找對應的圖片
ppi的運算方式是:
PPI = √(長度像素數² + 寬度像素數²) / 屏幕對角線英寸數
dp:Density-independent pixels,以160PPI屏幕為標准,則1dp=1px,
dp和px的換算公式 :
dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。
sp:Scale-independent pixels,它是安卓的字體單位,以160PPI屏幕為標准,當字體大小為 100%時, 1sp=1px。
sp 與 px 的換算公式:sp*ppi/160 = px
總結得出:
px = dp*ppi/160
dp = px / (ppi / 160)
px = sp*ppi/160
sp = px / (ppi / 160)
dp = sp?