1.基礎(chǔ)概念
屏幕大小:即屏幕對(duì)角的的長(zhǎng)度抹剩。1英寸=2.54厘米,那么一個(gè)5寸的手機(jī)的對(duì)角線長(zhǎng)度就是5 X 2.54=12.7厘米澳眷。
分辨率:即屏幕的像素點(diǎn)個(gè)數(shù),例如:一個(gè)屏幕的分辨率為320*480即這個(gè)屏幕上有320 X 480個(gè)像素點(diǎn)钳踊。
dpi:即dot per inch的縮寫(xiě),就是每一英寸的像素?cái)?shù)拓瞪,也叫做像素密度。這個(gè)值越大祭埂,圖片就越清晰,反之則模糊沟堡。例如手機(jī)屏幕的物理尺寸為1.5英寸x2英寸,屏幕分辨率為240x320矢空,則我們可以計(jì)算出在這部手機(jī)的屏幕上,每一英寸包含的像素點(diǎn)的數(shù)量為240/1.5=160dpi(橫向)或320/2=160dpi(縱向)屁药,160dpi就是這部手機(jī)屏幕的像素密度。手機(jī)屏幕像素密度的計(jì)算公式:手機(jī)像素密度(dpi)=(橫向or縱向)分辨率 / (橫向or縱向)屏幕物理尺寸
dp:也叫dip酿箭,即device independent pixels的縮寫(xiě),就是設(shè)備獨(dú)立像素缭嫡,也叫邏輯像素。由于Android手機(jī)的屏幕有各種大小和不同的分辨率妇蛀,因此不能直接使用px物理像素為單位笤成,因?yàn)橹苯邮褂脮?huì)導(dǎo)致布局在低分辨率的屏幕顯示不全眷茁,在高分辨率的屏幕上留白。而使用dp這個(gè)邏輯像素就會(huì)使不同分辨率的屏幕顯示的布局盡量一致上祈,從而避免這樣的問(wèn)題出現(xiàn)。所以Android開(kāi)發(fā)使用的邏輯像素單位登刺。
pt:即point,就是一個(gè)標(biāo)準(zhǔn)的長(zhǎng)度單位纸俭,1pt=1/72英寸,ios開(kāi)發(fā)使用的單位
px:即pixels的縮寫(xiě)掉蔬,就是像素矾瘾, 1px代表屏幕上一個(gè)物理像素點(diǎn)女轿,在不同分辨率的設(shè)備上像素點(diǎn)的大小不同壕翩,同尺寸的屏幕分辨率越高,像素點(diǎn)越小放妈,反之越大。px像素是Web開(kāi)發(fā)中常用的單位芜抒。
sp:即scaled pixels的縮寫(xiě),就是放大像素宅倒。主要用于設(shè)置字體的大小。谷歌開(kāi)發(fā)建議文字的大小單位最好使用sp拐迁,其目的是當(dāng)系統(tǒng)設(shè)置字體大小時(shí),app的文字能隨著系統(tǒng)的設(shè)置而放大縮小线召,但實(shí)際開(kāi)發(fā)過(guò)程中,如果沒(méi)有對(duì)系統(tǒng)不同大小的字體設(shè)計(jì)多套布局的話缓淹,不建議使用sp塔逃,因?yàn)楫?dāng)文字隨系統(tǒng)設(shè)置放大縮小時(shí)布局會(huì)混亂前酿。例如某個(gè)Text布局給了一個(gè)30dp的固定高度,內(nèi)容文字的大小使用sp為單位罢维,當(dāng)系統(tǒng)設(shè)置為最大號(hào)的字體時(shí),Text文字大小隨之變大會(huì)導(dǎo)致文字高度大于Text高度從而顯示不全肺孵。
2.單位轉(zhuǎn)換
px轉(zhuǎn)為dp
dips=(pixs*160)/densityDpi
private static final float density = mContext.getResources().getDisplayMetrics().density;
/**
* px轉(zhuǎn)成dp
* @param pxValue
*/
public static int px2dip(float pxValue) {
return (int) (pxValue / density + 0.5f);
}
dp轉(zhuǎn)為px
pixs =dips * (densityDpi/160).
private static final float density = mContext.getResources().getDisplayMetrics().density;
/**
* dp轉(zhuǎn)成px
* @param dipValue
*/
public static int dip2px(float dipValue) {
return (int) (dipValue * density + 0.5f);
}
在實(shí)際轉(zhuǎn)化的代碼中需要加上0.5f是為了在轉(zhuǎn)化為int類型的時(shí)候,將計(jì)算結(jié)果賦值為它最接近的正數(shù)平窘。
3.Android如何適配
首先系統(tǒng)會(huì)根據(jù)不同分辨率的手機(jī)選擇不同的資源文件,因此需要設(shè)計(jì)多套UI和多套資源文件瑰艘。
drawable-ldpi: 低分辨率屏幕密度為120dpi的手機(jī)設(shè)備(1dp = 0.75px)
drawable-mdpi: 中分辨率屏幕密度為160dpi的手機(jī)設(shè)備(此為baseline,其他均以此為基準(zhǔn)紫新,在此設(shè)備上,1dp = 1px)
drawable-hdpi: 高分辨率屏幕密度為240dpi的手機(jī)設(shè)備 (1dp = 1.5px)
drawable-xhdpi: 更高分辨率屏幕密度為320dpi的手機(jī)設(shè)備 (1dp = 2px)
drawable-xxhdpi:超高分辨率屏幕密度為480dpi的手機(jī)設(shè)備 (1dp = 3px)