Android中的dp

在Android開(kāi)發(fā)中匾效,我們?cè)诿枋鯲iew的寬陆盘、高時(shí)通常使用dp普筹,但是設(shè)計(jì)在UI中進(jìn)行標(biāo)注時(shí),卻使用的是px隘马。所以很多時(shí)候就導(dǎo)致UI和實(shí)際效果不一致太防。史記開(kāi)發(fā)中,給設(shè)計(jì)和開(kāi)發(fā)人員帶來(lái)了很多困擾酸员。

  • dp是什么?
  • 那么Android為什么要引入dp杏头,直接用px不可以嗎?
  • dp和px又是什么關(guān)系?實(shí)際開(kāi)發(fā)中該怎么轉(zhuǎn)換?

在回答上面的問(wèn)題之前,我們需要了解Android上一些基本概念:

  • 英寸:指實(shí)際物理計(jì)量單位沸呐,手機(jī)對(duì)角線的大小。一般描述呢燥,手機(jī)的大小都是用的英寸崭添,比如:紅米4x就剛好是5英寸
  • 分辨率:屏幕上垂直方向和水平方向上的像素個(gè)數(shù),相同大小的手機(jī)叛氨,分辨率越高呼渣,屏幕的清晰度也越高。
  • 像素密度:每英寸的像素點(diǎn)個(gè)數(shù)寞埠,同樣的屁置,像素密度越高,手機(jī)的清晰度也越高仁连。像素密度=√{(長(zhǎng)度像素?cái)?shù)2+寬度像素?cái)?shù)2)}/ 屏幕尺寸蓝角。
  1. dp是什么?

    dp是Android中的計(jì)量單位阱穗,主要是是用來(lái)標(biāo)注控件的寬、高使鹅。它是一種基于像素密度的抽象單位揪阶,在每英寸160點(diǎn)的顯示器上1dp=1px。

  2. Android為什么要引入dp,為什么不可以直接用px?

    由于患朱,不同的手機(jī)使用的屏幕像素密度(每英寸屏幕上擁有的像素點(diǎn))不一致鲁僚,如果都使用px進(jìn)行計(jì)量,就會(huì)導(dǎo)致同一個(gè)控件在不同的手機(jī)上裁厅,所表現(xiàn)出來(lái)的差異極大冰沙。

image

可以看到,如果不用dp進(jìn)行轉(zhuǎn)換执虹,同樣一個(gè)布局拓挥,在不同的手機(jī)上差異巨大,甚至有可能導(dǎo)致布局錯(cuò)亂声畏,這樣對(duì)普通用戶的使用體驗(yàn)極差撞叽。而使用dp就基本不會(huì)出現(xiàn)這 種情況,因?yàn)锳ndroid系統(tǒng)已經(jīng)幫我們進(jìn)行了適配插龄。

  1. dp和px的關(guān)系愿棋,以及實(shí)際開(kāi)發(fā)中該怎么轉(zhuǎn)換?

    先看一個(gè)公式:<code>px=dp * (dpi/160)</code>,這里的dpi就是我們上面提到的像素密度均牢,至于為什么是除以160糠雨,可以查看知乎上的問(wèn)題為什么 px=dp*(dpi/160),看到這里,我們就明白為什么每英寸160個(gè)像素點(diǎn)的時(shí)候1dp=1px了徘跪。在實(shí)際開(kāi)發(fā)中我們不需要這么計(jì)算甘邀,因?yàn)?lt;code>(dpi/160)</code>這一步Android系統(tǒng)已經(jīng)幫我們計(jì)算好了,所以我們可以通過(guò)以下的方式對(duì)px和dp進(jìn)行轉(zhuǎn)換:

  /**
     * dp轉(zhuǎn)換px
     */
    private fun dp2px(context: Context, dpValue: Float): Float {
        return context.resources.displayMetrics.density * dpValue
    }

    /**
     * px轉(zhuǎn)換dp
     */
    private fun px2dp(context: Context, pxValue: Float): Float {
        return pxValue / context.resources.displayMetrics.density
    }
  1. 補(bǔ)充:

    像素密度和屏幕的關(guān)系:

    QVGA(240*320)   density=120  
    WQVGA(240*400)  density=120  
    HVGA(320*480)   density=160  
    WVGA(480*800)   density=240  
    WXGA(1280*720)  density=320
    WUXGA(1920*1200)density=480
    QXGA(2018*1536) density=640
    

    不同像素密度對(duì)應(yīng)的drawable文件夾

    drawable-ldpi:  屏幕密度為120的手機(jī)設(shè)備
    
    drawable-mdpi:  屏幕密度為160的手機(jī)設(shè)備
    
    drawable-hdpi:  屏幕密度為240的手機(jī)設(shè)備
    
    drawable-xhdpi: 屏幕密度為320的手機(jī)設(shè)備
    
    drawable-xxhdpi:屏幕密度為480的手機(jī)設(shè)備
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垮庐,一起剝皮案震驚了整個(gè)濱河市松邪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哨查,老刑警劉巖逗抑,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異寒亥,居然都是意外死亡邮府,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)溉奕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)褂傀,“玉大人,你說(shuō)我怎么就攤上這事加勤∠杀伲” “怎么了同波?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)欺嗤。 經(jīng)常有香客問(wèn)我参萄,道長(zhǎng),這世上最難降的妖魔是什么煎饼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任讹挎,我火速辦了婚禮,結(jié)果婚禮上吆玖,老公的妹妹穿的比我還像新娘筒溃。我一直安慰自己,他們只是感情好沾乘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布怜奖。 她就那樣靜靜地躺著,像睡著了一般翅阵。 火紅的嫁衣襯著肌膚如雪歪玲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天掷匠,我揣著相機(jī)與錄音滥崩,去河邊找鬼。 笑死讹语,一個(gè)胖子當(dāng)著我的面吹牛钙皮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顽决,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼短条,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了才菠?” 一聲冷哼從身側(cè)響起茸时,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赋访,沒(méi)想到半個(gè)月后可都,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡进每,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了命斧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片田晚。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖国葬,靈堂內(nèi)的尸體忽然破棺而出贤徒,到底是詐尸還是另有隱情芹壕,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布接奈,位于F島的核電站踢涌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏序宦。R本人自食惡果不足惜睁壁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望互捌。 院中可真熱鬧潘明,春花似錦、人聲如沸秕噪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)腌巾。三九已至遂填,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澈蝙,已是汗流浹背吓坚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碉克,地道東北人凌唬。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像漏麦,于是被迫代替她去往敵國(guó)和親客税。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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