在移動端 UI 設計中,經常會用到的單位有 4 種:px、pt、dp 和 sp,很多人分辨不清這幾種單位及其換算關系,以及 iOS 和 Android 的切圖要求,我在這里做下簡單的介紹,希望大家讀完后能有所收獲(如有錯誤,歡迎糾正)。
一、常用單位
1. px (像素)
px 即 pixel,像素點,電子屏幕上組成圖像的最基本單位,在描述屏幕分辨率時也會使用該單位。1px 表示一個像素,例如 iPhone 8 的尺寸為 750px × 1334px,表示在該手機屏幕上,水平方向每行有 750 個像素點,垂直方向每列有 1334 個像素點。
2. pt (磅)
pt 即 point,有兩個含義:一是印刷行業常用單位,是一個標準長度單位,絕對大小,1pt = 1/72 英寸 = 0.35mm;二是 iOS 開發用的基本單位,當設計師以 1 倍尺寸進行設計 (375pt × 667pt) 并給出標注稿時,開發人員無需除以 2 便可直接使用。
3. dp (也稱 dip)
dp 是安卓開發用的基準單位,在 dpi (屏幕像素密度,即每英寸包含的像素點) 為 160 的屏幕為上,1dp = 1px。為了簡單起見,Android 把屏幕密度分為了 5 種:mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi,下文會詳細介紹其換算關系。
4. sp (可縮放獨立像素)
在安卓系統里,sp 與 dp 類似,不同的是 sp 可以根據用戶的字體大小首選項進行縮放,而 dp 則不會。 盡量使用 dp 作為空間大小單位,sp 作為文字相關大小單位,例如:新聞類和短信類等大篇幅文本,推薦使用 sp 為單位。
二、pt 與 px 換算
1. pt = (ppi / dpi) px
在 iOS 開發中,不同機型的 iPhone 設備需要用到不同倍率的切圖,下表格為各 iPhone 機型顯示屏參數對比:
機型 | X | 8+/7+/6+ | 8/7/6/6s | 5/5s | 4/4s |
---|---|---|---|---|---|
屏幕尺寸(inch) | 5.8 | 5.5 | 4.7 | 4 | 3.5 |
物理尺寸(px) | 1125 × 2436 | 1080 × 1920 | 750 × 1334 | 640 × 1136 | 640 × 960 |
設計尺寸(px) | 1125 × 2436 | 1242 × 2208 | 750 × 1334 | 640 × 1136 | 640 × 960 |
開發尺寸(pt) | 375 × 812 | 414 × 736 | 375 × 667 | 320 × 568 | 320 × 480 |
ppi | 458 | 401 | 326 | 326 | 326 |
dpi | 163 | 154 | 163 | 163 | 163 |
倍率 | @3x | @3x | @2x | @2x | @2x |
這里再簡單了解下兩個概念,ppi 和 dpi。
ppi (iOS):即 pixel per inch,屏幕像素密度,表示每英寸所包含的像素點,該值越高,屏幕越細膩。
dpi (iOS) :開發像素密度,表示每英寸所包含的開發像素點。
在 iOS 開發中,規定以 ppi = 163,dpi = 163 作為開發基準,
當 ppi = 163,dpi = 163 時,則 1pt = 1px;
當 ppi = 326,dpi = 163 時,則 1pt = 2px;
當 ppi = 401,dpi = 154 時,則 1pt = 2.6px ≈ 3px。
(為什么 iPhone 8+/7+/6+ 的開發基準是154?可能要問問蘋果了...)
依此類推,得出換算公式一:
pt = (ppi / dpi) px
若有小數,四舍五入即可。
2. iOS 切圖要求
在 iOS 開發中,目前只需要 @2x 和 @3x 兩種切圖,所以導出 2 倍和 3 倍的 png 圖片即可。導出前注意檢查切圖是否存在半像素、毛邊等情況,保證對齊像素,這樣才能有效避免上線后頁面上的 icon 出現虛邊的問題,提高細節質量。
另外補充一點:從整體開發尺寸看,iPhone 8 是 375 × 667 pt (@2x),而 iPhone X 是 375 × 812 pt (@3x),同樣的寬度,一個用 @2x 圖,一個用 @3x 圖,iPhone X 表現出了更高的清晰度,如圖 2-1 所示。
三、dp 與 px 換算
1. dp = (dpi / 160) px
在 Android 開發中,因為機型參差不齊,需要用屏幕密度來區分設計。
屏幕密度 | mdpi | hdpi | xhdpi | xxhpdi | xxxhdpi |
---|---|---|---|---|---|
代表設計像素 | 320 × 480 px | 480 × 800 px | 720 × 1280 px | 1080 × 1920 px | 1440 × 2256 px |
dpi | 160 | 240 | 320 | 480 | 640 |
基準dpi | 160 | 160 | 160 | 160 | 160 |
倍率 | @1x | @1.5x | @2x | @3x | @4x |
注意,這里的 dpi (Android) 和上文的 dpi (iOS) 是不同的概念,dpi (iOS) 是開發像素密度,而 dpi (Android) 即 dot per inch,表示屏幕像素密度,類似 iOS 開發里的 ppi。
Android 中,規定以 dpi = 160 為開發基準,
當 dpi = 160,基準dpi = 160,1dp = 1px;
當 dpi = 240,基準dpi = 160,1dp = 1.5px;
當 dpi = 320,基準dpi = 160,1dp = 2px。
依此類推,得出換算公式二:
dp = (dpi / 160) px
2. Android 切圖要求
在設計圖標時,對于 5 種主流的屏幕像素密度 (mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi) 應按照 2:3:4:6:8 的比例進行縮放,如圖 3-1 所示。
例如,一個啟動圖標的尺寸為 48 × 48 dp,這表示在 mdpi 的屏幕上其實際尺寸應為 48 × 48 px;在 hdpi 的屏幕上其實際大小是 mdpi 的 1.5 倍 (72 × 72 px);在 xhdpi 的屏幕上其實際大小是 mdpi 的 2 倍 (96 × 96 px),依此類推。
在某些況行下,還需要提供一種特殊的切圖:點九圖 (上圖所示)。點九圖是 Android 開發中用到的一種特殊格式的圖片,文件名以 “.9.png” 結尾。
這種圖片能告訴程序,圖像哪一部分可以被拉升,哪一部分不能被拉升需要保持原有比列。運用點九圖可以保證圖片在不模糊變形的前提下做到自適應,比如對話框背景圖片就會用到點九圖。
--
以上是全部內容,感謝你的閱讀!
End