android裡px dip dp dpi的關係

2021-08-15 09:28:51 字數 1952 閱讀 2301

有一段日子,關係畫素的問題一直困擾著我,理不清他們之間的關係,直到在網上查閱了很多相關知識後,才有了

比較清楚的認識,感謝度娘!現作為筆記寫下來,也希望能對別人有所幫助。

px:平常所說的1920×1080說的是畫素數量,也就是1920px×1080px,代表手機高度上有1920個畫素點,寬度上

1080個畫素點。我們在做android ui開發時不建議使用px單位,因為同樣100px的,在不同手機上顯示的

實際大小

可能不同。

dpi:畫素密度。假設有一部手機,螢幕的物理尺寸為1.5英吋x2英吋,螢幕解析度為240x320,則我們可以計算出在

這部手機的螢幕上,每英吋包含的畫素點的數量為240/1.5=160dpi(橫向)或320/2=160dpi(縱向),160dpi就是這部

手機的畫素密度,畫素密度的單位dpi是dots per inch的縮寫,即每英吋畫素數量。橫向和縱向的這個值都是

相同的,原因

是大部分手機螢幕使用正方形的畫素點。

android系統定義了四種畫素密度:低(120dpi)、

中(160dpi)、

高(240dpi)

和超高(320dpi),

它們對應的dp到px的係數分別為0.75、1、1.5和2,這個係數乘以

dp長度就是畫素數。

例如介面上有一

個長度為「80dp」的,那麼它在240dpi的手機上實際顯示為80x1.5=120px,

在320dpi的手機上實際

顯示為80x2=160px。

如果你拿這兩部手機放在一起對比,會發現這個的物理尺寸「差不多」

,這就是使用dp作為單位

的效果。

dp和dip:一樣的概念。其實dp就是為了使得開發者設定的長度能夠根據不同螢幕(解析度/尺寸也就是dpi)獲得不同的像

數數量(px)。如:我將乙個控制項設定長度為1dp,那麼在160dpi上該控制項長度為1px,在240dpi的螢幕上該控制項的長度為

1*240/160

=1.5個

畫素點,

也就是dp會隨著不同螢幕而改變控制項長度的畫素數量。

記住一點,dp最終都要化為畫素數量來衡

量大小的,

因為只有像

素數量最直觀。我們在做ui時一般就得使用dp作為單位。

sp:與縮放無關的抽象畫素(scale-independent pixel)。sp和dp很類似但唯一的區別是,android系統允許使用者自定義

文字尺寸大小(小、正常、大、超大等等),當文字尺寸是「正常」時1sp=1dp=0.00625英吋,而當文字尺寸是「大」或「超

大」時,

1sp>1dp=0.00625英吋。類似我們在windows裡調整字型尺寸以後的效果——視窗大小不變,只有文字大小

改變。

也就是說sp是

用來指定字型的大小。

dp轉px:對於android 來說,最終我們能讀懂或者衡量的都是px,所以最後我們都將dp化為px好理解一點。我總結了dp轉

px的公式:

dp值×(當前dpi/160dpi)= 當前的畫素數目。 那麼「當前dpi」怎麼知道是多少呢?當然也有方法的,我們可以寫代

碼獲得:

displaymetrics dm = new 

displaymetrics();

getwindowmanager().getdefaultdisplay().getmetrics(dm);

int densitydpi = dm.densitydpi

; //

當前dpi:120/160/240/320

float density = dm.density

;

也可以用dp值×density得到px的值。

Android裡透明的ListView

發現了乙個list滾動時,某item背景透明的問題。網上搜尋一下,發現有很多人在問list背景黑色的問題,交流中給出的解決方案基本上很統一。先是解釋問題產生的原因是android對list的滾動做了顯示優化,用寫在該list的layout檔案中的android cachecolorhint顏色值與i...

記Android裡的座標

android的座標系統其實是乙個比較細也比較雜的東西,想乙個小的對比文章,以後忘了可以看看。首先是motionevent的getrawx和getx兩個函式。這個還是比較簡單的,getrawx取的是相對於螢幕的座標,螢幕的原點 0,0 在左上角,x軸正方向是向右,y軸正方向向下。getx是相對于父元...

集結Android開發裡的各種大神

國內 trinea t大 t大部落格 codekk t大主導的開源專案集合及原始碼解析 codekk 鴻洋神 鴻洋神的csdn 任玉剛 android開發藝術探索作者 任大的csdn 郭霖 第一行 作者 郭大俠的csdn 胡凱 胡凱部落格 老羅 底層牛人,在下水平不夠,看得很少 老羅的csdn 乾貨...