设计中涉及到的dip、dp、px、sp等单位说明
在進行UI設計中常會遇到各種數值單位,開始使用時也常搞混,于是搜集了單位解說的文章與大家一同分享
dip:?device?independent?pixels(設備獨立像素).?不同設備有不同的顯示效果,這個和設備硬件有關,一般我們為了支持WVGA、HVGA和QVGA?推薦使用這個,不依賴像素。??
px:?pixels(像素).?不同設備顯示效果相同,一般我們HVGA代表320x480像素,這個用的比較多。??
pt:?point,是一個標準的長度單位,1pt=1/72英寸,用于印刷業,非常簡單易用;??
sp:?scaled?pixels(放大像素).?主要用于字體顯示best?for?textsize。??
由此,根據?google?的建議,TextView?的字號最好使用?sp?做單位,而且查看? TextView? 的源碼可知?Android?默認使用?sp?作為字號單位。??
在?Android?中,??1pt?大概等于?2.22sp??
以上供參考,如果?UI?能夠以?sp?為單位提供設計是最好的,如果設計中沒有?sp? 的概念,則開發人員也可以通過適當的換算取近似值。??
過去,程序員通常以像素為單位設計計算機用戶界面。例如,定義一個寬度為300像素的表單字段,列之間的間距為5個像素,圖標大小為16×16像素?等。這樣處理的問題在于,
如果在一個每英寸點數(dpi)更高的新顯示器上運行該程序,則用戶界面會顯得很小。在有些情況下,用戶界面可能會小到難以看清?內容。
??
與分辨率無關的度量單位可以解決這一問題。Android支持下列所有單位。??
px(像素):屏幕上的點。??
in(英寸):長度單位。??
mm(毫米):長度單位。??
pt(磅):1/72英寸。??
dp(與密度無關的像素):一種基于屏幕密度的抽象單位。在每英寸160點的顯示器上,1dp?=?1px。??
dip:與dp相同,多用于android/ophone示例中。??
sp(與刻度無關的像素):與dp類似,但是可以根據用戶的字體大小首選項進行縮放。??
?
針對dip和px 的關系,做以下概述:
QVGA屏density=120??????????????????????? QVGA(240*320)
HVGA屏density=160??????????????????????? HVGA(320*480)
WVGA屏density=240 ???????????????????? WVGA(480*800)
WQVGA屏density=120??????????????????? WQVGA(240*400)
density值表示每英寸有多少個顯示點,與分辨率是兩個概念。
?
不同density下屏幕分辨率信息,以480dip*800dip的 WVGA(density=240)為例:
density=120時
屏幕實際分辨率為240px*400px(兩個點對應一個分辨率)
狀態欄和標題欄高各19px或者25dip
橫屏是屏幕寬度400px 或者800dip,工作區域高度211px或者480dip
豎屏時屏幕寬度240px或者480dip,工作區域高度381px或者775dip
?
density=160時
屏幕實際分辨率為320px*533px(3個點對應兩個分辨率)
狀態欄和標題欄高個25px或者25dip
橫屏是屏幕寬度533px 或者800dip,工作區域高度295px或者480dip
豎屏時屏幕寬度320px或者480dip,工作區域高度508px或者775dip
?
density=240時
屏幕實際分辨率為480px*800px(一個點對于一個分辨率)
狀態欄和標題欄高個38px或者25dip
橫屏是屏幕寬度800px 或者800dip,工作區域高度442px或者480dip
豎屏時屏幕寬度480px或者480dip,工作區域高度762px或者775dip
?
下面是開發者需要知道的內容,但對于我們設計者也很具參考價值:
apk的資源包中
當屏幕density=240時,使用hdpi?標簽的資源
當屏幕density=160時,使用mdpi標簽的資源
當屏幕density=120時,使用ldpi標簽的資源。
不加任何標簽的資源是各種分辨率情況下共用的。
布局時盡量使用單位dip,少使用px。
?
dp與px換算公式:
pixs=dips * (densityDpi/160)
dips=(pixs*160)/densityDpi
?
dp與px轉換的方法:
????public?static?int?dipToPx(Contextcontext,?float?dipValue) {
???????final?float?scale =context.getResources().getDisplayMetrics().density;
???????return?(int) (dipValue * scale+ 0.5f);
??? }
?
????public?static?int?pxToDip(Contextcontext,?float?pxValue) {
???????final?float?scale =context.getResources().getDisplayMetrics().density;
???????return?(int) (pxValue / scale+ 0.5f);
??? }
?
為了使用戶界面能夠在現在和將來的顯示器類型上正常顯示,建議大家始終使用sp作為文字大小的單位,將dip作為其他元素的單位。當然,也可以考慮使用矢量圖形,而不是用位圖。如果 UI 能夠以sp為單位提供設計是最好的,如果設計中沒有sp的概念,則開發人員也可以通過適當的換算取近似值。
與分辨率無關的度量單位可以解決這一問題。Android支持下列所有單位。
不經常用的其他單位:
pt:point,磅,是一個標準的長度單位,1pt=1/72英寸,用于印刷業,非常簡單易用;在 Android 中,1pt 大概等于 2.22sp。
in:inches,英寸:長度單位。
Mm:millimeters,毫米:長度單位。
轉載于:https://www.cnblogs.com/zerow01/archive/2013/02/25/3344888.html
總結
以上是生活随笔為你收集整理的设计中涉及到的dip、dp、px、sp等单位说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 助听器多少钱啊?
- 下一篇: Debian上网的问题小结