Android中的畫素單位px dp sp的區別

2021-08-04 06:41:06 字數 1816 閱讀 1073

使用規律,務必牢記:文字的尺寸一律用sp單位,非文字的尺寸一律使用dp單位,**才用px。

首先,我們先弄明白px這個單位的含義,因為px是dp、sp的基礎,其實dp、sp是為了解決螢幕適配的問題,在px單位基礎之上進行計算所得到的單位。

px其實就是計算機語言中的畫素,我們知道一張精美的是由許許多多的畫素點組成的。每個畫素點代表一種顏色,這些畫素點組合成了一張精美的。在手機螢幕上,螢幕的顯示也是由乙個個畫素點組成的,然而為什麼我們不直接用畫素作為安卓應用的單位呢?

現在我們來看乙個需求

何為dp、sp?

其實我們並不用去糾結了,只要知道這是在畫素和螢幕尺寸的一種比例產物即可,用來解決的問題上面也已經說的很是清楚。

我還要解釋一下另外乙個問題,為什麼要用sp來表示文字大小呢?那是因為android手機在系統設定裡面可以設定字型的大小(小、普通、大、超大),設定普通字型時,同數值dp和sp的文字看起來是一樣大的,但如果設定為大字型,用dp設定大小的文字沒有變化,而用sp設定大小的文字就變大了。所以說,dp與系統設定的字型大小沒有關係,而sp會隨系統設定的字型大小來變大或者變小。

難道px就一點都不需要重視嗎?

答案是:非也。以上使用僅限於xml布局檔案中的使用,在**中設定控制項的大小其實使用的單位都是px,那麼這也就涉及到了px與dp之間的轉換問題。

dp與px之間的關係

dp和px之間的換算,取決於具體裝置上的畫素密度,即每單位螢幕中顯示的畫素數量,畫素密度是displaymetrics裡的density引數。density=px值/dp值,即當density=1.0時,表示乙個dp值對應乙個px值;具體的轉換函式如下所示:

/**  

* 以下兩個方法展示了dp與px之間的互相轉換。所用公式就是density=px值/dp值。

* 注意的是,需要通過上下文的相關方法獲取到density的值進行計算。

* 計算值後面都加了0.5f是為了防止捨入 誤差,浮點數進行int強轉進行的是四捨五入的操作,0.5f保證值一定進1.

*//**

* 根據手機螢幕的密度從dp的單位轉成為px。

*/public

static

intdp2px(context context, float dpvalue)

/**

* 根據手機螢幕的密度從px的單位轉成為dp。

*/public

static

intpx2dp(context context, float pxvalue)

使用場景

由於只有在**中才會使用到px的值,所以**中進行的運算就是dp轉px的運算,使用案例如下:

/*

* 上述兩個方法置於utils包內,一般用於解決特定問題的方法都會置於相關的utils方法中

*/int px = utils.dp2px(this, 10.0f);

linearlayout.layoutparams textviewparams = new linearlayout.layoutparams(

layoutparams.match_parent, layoutparams.wrap_content);

textviewparams.setmargins(px, px, px, px);

android中的畫素單位dp px pt sp

看到有很多不太理解dp sp和px的區別 現在這裡介紹一下dp和sp。dp也就是dip。這個和sp基本類似。如果設定表示長度 高度等屬性時可以使用dp 或sp。但如果設定字型,需要使用sp。dp是與密度無關,sp除了與密度無關外,還與scale無關。如果螢幕密度為160,這時dp和sp和px是一樣的...

畫素(px)到底是個什麼單位

px,對於許多網頁設計者來說,是最常用的css長度單位。然而,1px到底多長,恐怕沒有多少人回答得上來。css長度本身有絕對長度和相對長度的區分。cm pt之類的都是絕對長度,它們是物理長度 1cm是1 100公尺,而1公尺則大約是光在1秒鐘內跑過距離的3億分之一。至於光速和1秒的精確值到底是多少,...

Word中單位畫素的轉化

該方法用於將度量單位由厘公尺轉換為磅 1 厘公尺 28.35 磅 返回 single 型別。functioncentimeterstopoints centimeters as single as single 引數說明 centimeters single 型別,必需。指需要轉換為磅的厘公尺數。返...