兩分鐘理解Android中PX软免、DP宫纬、SP的區(qū)別

前言
眾所周知,Android廠商非常多膏萧,各種尺寸的android手機(jī)漓骚、平板層出不窮。導(dǎo)致了Android生態(tài)環(huán)境的碎片化現(xiàn)象越來越嚴(yán)重榛泛。Google公司為了解決分辨率過多的問題蝌蹂,在Android的開發(fā)文檔中定義了px、dp曹锨、sp孤个,方便開發(fā)者適配不同分辨率的Android設(shè)備。對于初級程序員來說理解掌握適配的一些基礎(chǔ)知識是必須的沛简。

▲ 基礎(chǔ)概念 :

px : 其實(shí)就是像素單位齐鲤,比如我們通常說的手機(jī)分辨列表800*400都是px的單位
sp : 同dp相似,還會根據(jù)用戶的字體大小偏好來縮放
dp : 虛擬像素椒楣,在不同的像素密度的設(shè)備上會自動(dòng)適配
dip: 同dp

▲ 舉個(gè)栗子 : px與dp
pixel给郊,即像素,1px代表屏幕上的一個(gè)物理的像素點(diǎn)捧灰。但px單位不被建議使用淆九。因?yàn)橥瑯酉袼卮笮〉膱D片在不同手機(jī)顯示的實(shí)際大小可能不同。要用到px的情況是需要畫1像素表格線或陰影線的時(shí)候毛俏,如果用其他單位畫則會顯得模糊炭庙。

要理解dp,首先要先引入dpi這個(gè)概念煌寇,dpi全稱是dots per inch煤搜,對角線每英寸的像素點(diǎn)的個(gè)數(shù),所以唧席,它的計(jì)算公式如下:

比如height和width即為長寬的像素,平方和即為對角線的像素個(gè)數(shù)嘲驾,size即我們常說的5寸手機(jī)淌哟、4寸手機(jī)中的5和4,即對角線的長度辽故。
所以徒仓,一樣是5寸的手機(jī),分辨率越高誊垢,dpi越高掉弛。分辨率相同症见,屏幕對角線英寸數(shù)越小,dpi越高殃饿。

而dp也叫dip谋作,是device independent pixels。設(shè)備不依賴像素的一個(gè)單位乎芳。在不同的像素密度的設(shè)備上會自動(dòng)適配遵蚜,比如:
在320x480分辨率,像素密度為160,1dp=1px
在480x800分辨率奈惑,像素密度為240,1dp=1.5px
計(jì)算公式:px = dp * (dpi/160)

我們做個(gè)簡單的Sample驗(yàn)證一下吭净,如下,一個(gè)布局代碼

    <Button
        android:layout_width="150px"
        android:layout_height="wrap_content"
        android:text="Test px" />
    <Button
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:text="Test dp" />

在480*800分辨率中,3.7屏幕對角線英寸數(shù)的設(shè)備效果圖如下

在480*800分辨率中肴甸,5.1屏幕對角線英寸數(shù)的設(shè)備效果圖如下

由此可以看出使用px作為單位的寂殉,在不同的設(shè)備中會顯示不同的效果。使用dp作為單位的原在,會根據(jù)不同的設(shè)備進(jìn)行轉(zhuǎn)化友扰,適配不同機(jī)型。所以建議在長度寬度的數(shù)值使用dp作為單位晤斩。

▲ 再舉個(gè)栗子 : dp與sp
既然我們在上面說了焕檬,dp可以自動(dòng)適配設(shè)備機(jī)型,那在字體里是否也同樣可行澳泵?我們再做個(gè)簡單的Sample驗(yàn)證一下实愚,如下,一個(gè)布局代碼

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Test dp"
        android:textSize="20dp" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Test sp"
        android:textSize="20sp" />

在480*800分辨率中,3.7屏幕對角線英寸數(shù)的設(shè)備效果圖如下

在480*800分辨率中兔辅,3.7屏幕對角線英寸數(shù)的設(shè)備下腊敲,我們修改手機(jī)系統(tǒng)字體大小,得到效果圖如下

由此可以看出使用sp作為字體大小單位,會隨著系統(tǒng)的字體大小改變维苔,而dp作為單位則不會碰辅。所以建議在字體大小的數(shù)值要使用sp作為單位

▲ 拓展
提供一個(gè)工具類:dp與px值轉(zhuǎn)換

public class DensityUtil {

    /**
     * 根據(jù)手機(jī)的分辨率從 dp 的單位 轉(zhuǎn)成為 px(像素)
     */
    public static int dp2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 根據(jù)手機(jī)的分辨率從 px(像素) 的單位 轉(zhuǎn)成為 dp
     */
    public static int px2dp(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市介时,隨后出現(xiàn)的幾起案子没宾,更是在濱河造成了極大的恐慌,老刑警劉巖沸柔,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件循衰,死亡現(xiàn)場離奇詭異,居然都是意外死亡褐澎,警方通過查閱死者的電腦和手機(jī)会钝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來工三,“玉大人迁酸,你說我怎么就攤上這事先鱼。” “怎么了奸鬓?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵焙畔,是天一觀的道長。 經(jīng)常有香客問我全蝶,道長闹蒜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任抑淫,我火速辦了婚禮绷落,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘始苇。我一直安慰自己砌烁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布催式。 她就那樣靜靜地躺著函喉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荣月。 梳的紋絲不亂的頭發(fā)上管呵,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音哺窄,去河邊找鬼捐下。 笑死,一個(gè)胖子當(dāng)著我的面吹牛萌业,可吹牛的內(nèi)容都是我干的坷襟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼生年,長吁一口氣:“原來是場噩夢啊……” “哼婴程!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抱婉,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤档叔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蒸绩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹲蒲,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年侵贵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缘薛。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窍育,死狀恐怖卡睦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漱抓,我是刑警寧澤表锻,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站乞娄,受9級特大地震影響瞬逊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仪或,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一确镊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧范删,春花似錦蕾域、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至添忘,卻和暖如春采呐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搁骑。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工斧吐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人靶病。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓会通,卻偏偏與公主長得像,于是被迫代替她去往敵國和親娄周。 傳聞我的和親對象是個(gè)殘疾皇子涕侈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容