安桌開發(fā)中 px dpi(ppi) dip(dp) sp 的一些總結(jié)

說起來慚愧,學(xué)安桌這么久才總結(jié)這個東西.并且網(wǎng)上已經(jīng)有很多類似的總結(jié)了.這個總結(jié)權(quán)當給加深記憶,以及給大家參考.


先解釋下上述各個名詞

px(pixels): 像素->
組成畫面的最小單位,由紅藍綠(RGB)三原色組成,像素的大小是沒有固定長度的,具體長度由具體設(shè)備決定.

dpi(dots per inch 每英寸點數(shù))和 ppi(pixels per inch 每英寸像素數(shù))->
可認為是同樣的單位,區(qū)別只在你是以點為最小單位還是以像素為最小單位(點一般是用于打印物體計算的)

dip/dp (device independent pixels)設(shè)備獨立像素,與設(shè)備屏幕有關(guān),是安卓開發(fā)用的長度單位

sp (scale pixel 像素縮放)拒名,安卓開發(fā)用的字體大小單位。

inch(英寸) 1inch=2.54cm


dpi/ppi的計算方法


image.png

在我5.2英寸虛擬機上運行以下代碼

    private fun calculatePPI(){
        val point = Point()
        windowManager.defaultDisplay.getRealSize(point)//獲取屏幕真實分辨率
        Log.e("CalculateDPI",(Math.sqrt((point.x*point.x+point.y*point.y).toDouble())/5.2f).toString())
        Log.e("SystemDPI",resources.displayMetrics.densityDpi.toString())
    }
//打印結(jié)果
01-29 12:44:23.794 8903-8903/? E/CalculateDPI: 423.6360097854721
01-29 12:44:23.794 8903-8903/? E/SystemDPI: 420

可見 系統(tǒng)提供的DPI的值并非最正確的.在系統(tǒng)中使用的全部都是系統(tǒng) dpi修械,沒有使用物理 dpi叁巨,也獲取不到物理 dpi停团。

Android 中內(nèi)置了幾個默認的 Dpi 喊递,根據(jù)分辨率查表即可得到該手機的系統(tǒng)DPI,不過系統(tǒng)DPI可以給修改蹬癌。

DPI類型 分辨率 DPI dp px
ldpi 240x320 120 1 0.75
mdpi(基準) 320x480 160 1 1
hdpi 480x800 240 1 1.5
xhdpi 720x1280 320 1 2
xxhdpi 1080x1920 480 1 3
Nexus 6/6p 1440x2560 560 1 3.5

dp的數(shù)學(xué)定義:1dp定義為屏幕密度值為160dpi時的1px

image.png

因此使用dp單位只能保證控件大小通過像素密度進行一定比例的縮放,但是顯示效果并不保證一樣.

image.png
image.png

比如同樣的320dp的控件 在720x1280分辨率下顯示效果如上圖
而在 320x480 分辨率下顯示效果如下圖


sp與dp類似,但是可以根據(jù)用戶的字體大小首選項進行縮放虹茶。
當文字尺寸是“正呈判剑”時1sp=1dp,而當文字尺寸是“大”或“超大”時蝴罪,1sp>1dp董济。
一般情況下可認為sp=dp。


對displayMetrics里面幾個值的解釋
densityDpi 即系統(tǒng)DPI
density=scaledDensity 系統(tǒng)DPI/基準DPI(160) 縮放因子
heightPixels 與 widthPixels 長寬有效像素,heightPixels會減去導(dǎo)航欄高度,并不是屏幕的真實像素大小
獲取屏幕真實像素大小使用windowManager.defaultDisplay.getRealSize()

dp px互轉(zhuǎn)方法,由上面的描述已經(jīng)知道怎么轉(zhuǎn)化了


image.png
image.png
   fun dip2px(context: Context, dpValue: Float): Int {
        val scale = context.resources.displayMetrics.density
        return (dpValue * scale + 0.5f).toInt()
    }

    fun px2dip(context: Context, pxValue: Float): Int {
        val scale = context.resources.displayMetrics.density
        return (pxValue / scale + 0.5f).toInt()
    }

//加的0.5作用是在強制轉(zhuǎn)化時進行4舍5入,比如(int)(4.4+0.5)=4 而(int)(4.5+0.5) = 5

參考資料:
http://www.reibang.com/p/584ac569ffc3
http://blog.qiji.tech/archives/2581

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末要门,一起剝皮案震驚了整個濱河市虏肾,隨后出現(xiàn)的幾起案子廓啊,更是在濱河造成了極大的恐慌,老刑警劉巖询微,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崖瞭,死亡現(xiàn)場離奇詭異,居然都是意外死亡撑毛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門唧领,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藻雌,“玉大人,你說我怎么就攤上這事斩个】韬迹” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵受啥,是天一觀的道長做个。 經(jīng)常有香客問我,道長滚局,這世上最難降的妖魔是什么居暖? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮藤肢,結(jié)果婚禮上太闺,老公的妹妹穿的比我還像新娘。我一直安慰自己嘁圈,他們只是感情好省骂,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著最住,像睡著了一般钞澳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涨缚,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天轧粟,我揣著相機與錄音,去河邊找鬼仗岖。 笑死逃延,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的轧拄。 我是一名探鬼主播揽祥,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼檩电!你這毒婦竟也來了拄丰?” 一聲冷哼從身側(cè)響起府树,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎料按,沒想到半個月后奄侠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡载矿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年垄潮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闷盔。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡弯洗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逢勾,到底是詐尸還是另有隱情牡整,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布溺拱,位于F島的核電站逃贝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏迫摔。R本人自食惡果不足惜沐扳,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望攒菠。 院中可真熱鬧迫皱,春花似錦、人聲如沸辖众。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凹炸。三九已至戏阅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啤它,已是汗流浹背奕筐。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留变骡,地道東北人离赫。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像塌碌,于是被迫代替她去往敵國和親渊胸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

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