Android DP解析

Android DP解析

之前面試被問到dp是比例嗎?那麼dp是什麼呢?明知dp不是比例,卻不知如何回答,一時語塞…想到用了這麼久的dp,卻對它完全不瞭解,慚愧。

基本概念

名詞概念

名稱 解釋
px 像素點,一個像素點爲1px
dp 即dip,像素密度
sp 同dp,但是可以根據系統字體偏好縮放
dpi 每英寸的像素數,也叫做屏幕密度

換算關係

dpi=height2width2size

px=dp(dpi/160)

根據換算關係:
320 x 480分辨率,3.6寸的手機:dpi爲160,1dp=1px

dp解析

dp是比例嗎?爲什麼要用dp?

實驗一

相同分辨率,不同大小的手機AB:

代號 分辨率 尺寸 dpi dp
手機A 320x480 3.6寸 160 1dp=1px
手機B 320x480 7.2寸 80 1dp=0.5px

假如AB都設置一個寬度爲100dp的TextView:

代號 TextView寬度 手機寬度 比例關係
手機A 100px 320px 10/32
手機B 50px 320px 5/32

得出結論:
對於相同分辨率的手機,屏幕越大,同DP的組件佔用屏幕比例越小。
可見,dp與屏幕並沒有確定的比例關係,故不是比例

如圖所示:

實驗二

相同大小,不同分辨率的手機AB:

代號 分辨率 尺寸 dpi dp
手機A 320x480 3.6寸 160 1dp=1px
手機B 640x960 3.6寸 320 1dp=2px

假如AB都設置一個寬度爲100dp的TextView:

代號 TextView寬度 手機寬度 比例關係
手機A 100px 320px 10/32
手機B 200px 640px 10/32

得出結論:
對於相同尺寸的手機,即使分辨率不同,同DP的組件佔用屏幕比例相同,UI效果也相同。

如圖:

綜上:
dp的UI效果只在相同尺寸的屏幕上相同,如果屏幕尺寸差異過大,則需要重做dp適配

這也是平板需要單獨做適配的原因,可見dp不是比例

爲什麼不用比例

爲什麼Android要用dp,而不用比例以兼容不同大小的手機呢?

如果用dp,假設在手機A上設置一個寬度爲屏幕一半寬dp值,高度爲屏幕一半高dp值的TextView。效果圖如下:

當它橫屏時,顯示效果如下:

但是,如果Android沒有采用dp作爲單位,而選用比例作爲單位,對於相同的TextView,橫屏後的顯示效果如下:

整個TextView組件都變形了!

所以:
dp可以維護Android組件自身的比例平衡,不至於在不同屏幕上變形。這是比例做不到的。

總結

dp的意義在於:

  1. 同尺寸大小的手機,使用dp做出的UI效果一定相同。
  2. 不同尺寸大小的手機,使用dp做出的UI效果一定不同(這裏不考慮weight等參數)。但只是組件相對於屏幕的大小比例有所縮放,組件自身的寬高比是不變的,即組件自身不會變形。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章