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