2013年10月14日 星期一

Android 的 pixel 與 dp

一直以來, 手機規格尺寸 pixel 與 dp (Density- Independent Pixels) 的問題,
就滿常出現在開發者之中的.

網路文章往往也一知半解,  即使知道了 pixel 與 dp 的轉換公式,
也不知公式如何得來?!

近日, Android Developer 上傳了一部影片,  比較詳細地說明了這些單位的前世今生!



我將其重點摘要如下:

DPI - dots per inch 

Android 的螢幕解析度的好壞, 可以用 pixel density 來衡量. 而它的單位便是 dpi.
dpi 越高的的螢幕, 可以顯示的越精細,  看下圖便可瞭解.


因此,  Google 為了簡化區分這些不同裝置螢幕解析度的好壞,
將其依 dpi 分成了四個不同的類別, 分別是:  MDPI, HDPI, XHDPI, XXHDPI.


160 dpi 的裝置屬 MDPI,  240 dpi 即 HDPI, 320 dpi 是 XHDPI, 480 dpi 是 XXHDPI.
以 MDPI 為最基本的解析度, 其他三個都是其倍數.

Density Independent Pixels (dp or dip)

Density Independent Pixels 簡寫為 dp or dip, 是一個虛擬的解析度,
目的是為了讓我們更好量化手機上的視覺大小.

1 dp 在 160 dpi (MDPI) 的裝置上的長度等於 1 pixel.
1 dp 在 320 dpi (MDPI) 的裝置上的長度等於 2 pixel.
(如果是算大小, 記得要平方.)

以此類推, 因此有了這個公式:


相同的 dp 大小在不同的裝置上看起來, 基本上會是非常相近的.
而我們人的手指大小通常約 50 dp, 因此 button建議的大小是不小於 50dp 左右的長寬.

計算( 以 Nexus 7 為例 )

Nexus 7 是一個 7" 的 XDPI 裝置,  解析度為 1920 x 1200 px,  問長寬分別是多少 dp?

首先, XDPI 是 320 dpi,
接著套用公式,
長 1920/ (320/160) = 960 dp
寬 1200/ (320/160) = 600 dp

設計上的建議

瞭解了整個單位設計的原因, 影片的最後還給了兩點建議:
1. 視覺 Layout 的設計上以 dp 為單位
2. 依需要分別給 MDPI, HDPI, XHDPI, XXHDPI 不同大小的圖片.





沒有留言:

張貼留言