當前位置:首頁 » 安卓系統 » androidspdppx

androidspdppx

發布時間: 2023-02-21 12:31:10

❶ Android中常見的單位ppi,dp,dpi,sp,px

在android 開發過程中,我們使用的單位比較少,一般情況下在描述字體大小的時候我們通常用sp,而在設置間距的時候我們用dp,除此之外很少再用到其他單位,而且很多時候我們用著用著就習慣了,也不去探究為什麼這么寫,可不可以用其他單位,每個單位到底代表著什麼意思,所以說,習慣真的很可怕呀。今天,我們就來一探究竟,看看這些單位背後的含義。

像素即是屏幕上顯示數據的最基本的點,在PS裡面也是其最根本的單位,所有的圖形都是在此基礎上生成的,平時我們經常講的手機屏幕解析度就是以像素作為單位的,比如在android中我們經常說的手機像素是1080X1920,其實它所表達的意思是在該手機上面在橫向上面有1080個像素點,在縱向上有1920個像素點。

在android中用來形式字體大小的單位,正常情況下會按照手機系統設置的文本大小來顯示文字,但是同時也會與系統設置的文本保持一致,比如在有些老年機上面為了更好的操作手機有些人會將字體設置為較大字體,這個時候使用sp作為單位的字體也會隨之變大,但是如果將字體大小的單位設置為dp,則不會隨著系統字體的變化而變化。

在每次的手機廠商新品發布會上,我們都會聽到關於手機的介紹,比如手機的屏幕解析度,多大尺寸等等。而當我們知曉一個手機的屏幕分辯率和手機尺寸的時候,就可以計算出手機的物理像素密度,其計算公式為:

需要注意的是,PPI是Android手機物理像素密度,而非在Android開發過程中我們經常說到的像素密度。

屏幕密度與dpi密切相關,dpi是每英寸的點數。也就是說,密度越大,每英寸內容納的點數就越多。

在android.util包下有個DisplayMetrics類可以獲得密度相關的信息。最重要的是densityDpi這個成員,它有如下幾個常用值:

DENSITY_LOW = 120

DENSITY_MEDIUM = 160 //默認值

DENSITY_TV = 213 //TV專用

DENSITY_HIGH = 240

DENSITY_XHIGH = 320

DENSITY_400 = 400

DENSITY_XXHIGH = 480

DENSITY_XXXHIGH = 640

dpi的值主要是通過displayMetrics獲取的,獲取方式為:

val densityDpi = resources.displayMetrics.densityDpi。

dp和dip是一樣的,設備獨立像素,這個和設備硬體有關,不同設備有不同的顯示效果。而通常在做android項目的時候,為了適配市場上面眾多的手機屏幕分辯率,我們一般都會採用dp。dp是Android基於物理設備的PPI抽象出來的一個單位。它是以160dpi的屏幕為基準定義的,在160dpi的屏幕上1dp=1px,那麼由此我們就可以得出其計算公式:

換算公式:1dp = (屏幕ppi/160)px或者是px = (屏幕ppi/160)*1dp。舉個例子:假設ppi = 320,那麼1dp = 2px。

下面我們來演練一下:

如圖所示,手機的屏幕分辯率為1080X1920,尺寸為5寸,從而計算得出PPI的值為440,再通過PPI計算出1dp 約等於3px。假設現在美工給的圖上面有一個a圖標,距離頂部的距離為30px,那麼根據最終我們的換算結果可知,我們設置為10dp就可以達到完美的顯示效果。

❷ 圖解android開發中dp和px的區別

方法/步驟


px: pixels(像素),不同的設備不同的顯示屏顯示效果是相同的,這是絕對像素,是多少就永遠是多少不會改變。

dp也是dip: device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,這個和設備硬體有關,一般我們為了支持WVGA、HVGA和QVGA 推薦使用此單位。

這里要特別注意dip與屏幕密度有關,而屏幕密度又與具體的硬體有關,硬體設置不正確,有可能導致dip不能正常顯示。在屏幕密度為160的顯示屏上,1dip=1px,有時候可能你的屏幕解析度很大如480*800,但是屏幕密度沒有正確設置比如說還是160,那麼這個時候凡是使用dip的都會顯示異常,基本都是顯示過小。

dip的換算:

dip(value)=(int) (px(value)/1.5 + 0.5)


舉例看來看看,首先在界面上布局兩個button,設置兩個兩個button離左邊的舉例一個是50dp,一個是50px。


用480*800的模擬器來運行。發現這兩個按鈕離左邊屏幕的距離沒有差別。

再用270*320的模擬器來運行,發現上面的按鈕離左邊屏幕的距離更近了。

如果用尺子來量,我們能發現px是固定的,距離沒有變,而dp則改變了。這樣就能看出它們的差別了。

❸ Android中dip,dp,sp,pt和px的區別

Android 開發字體的大小需要用google提供的sp單位,而控制項的大小需要使用dip 或者dp。
1. dp(或者dip device independent pixels)一種基於屏幕密度的抽象單位。在每英寸160點的顯示器上,1dp=1px。不同設備有不同的顯示效果,這個和設備硬體有關。
2. sp(Scaled Pixels)主要用於字體顯示,與刻度無關的一種像素,與dp類似,但是可以根據用戶的字體大小首選項進行縮放。
3. xp即像素,1px代表屏幕上一個物理的像素點,px單位不被建議使用,因為同樣100px的圖片,在不同手機上顯示的實際大小可能不同。

❹ Android中dip,dp,sp,pt和px的區別

dip: device independent pixels(設備獨立像素). 一般我們為了支持多種解析度如WVGA、HVGA和QVGA 推薦使用這個,不依賴像素。
dp: dip是一樣的,谷歌官方推薦使用這個
px: pixels(像素). 不同設備顯示效果相同,一般我們HVGA代表320x480像素,這個用的比較少。
pt: point,是一個標準的長度單位,1pt=1/72英寸,用於印刷業,非常簡單易用;
sp: scaled pixels(放大像素). 主要用於字體顯示best for textsize。

❺ px,dp和sp,這些單位有什麼區別

px:

即像素,1px代表屏幕上一個物理的像素點;

px單位不被建議使用,因為同樣100px的圖片,在不同手機上顯示的實際大小可能不同,如下圖所示(圖片來自android developer guide,下同)。

偶爾用到px的情況,是需要畫1像素表格線或陰影線的時候,用其他單位如dp會顯得模糊。

dp:

這個是最常用但也最難理解的尺寸單位。它與「像素密度」密切相關,所以首先我們解釋一下什麼是像素密度。假設有一部手機,屏幕的物理尺寸為1.5英
寸x2英寸,屏幕解析度為240x320,則我們可以計算出在這部手機的屏幕上,每英寸包含的像素點的數量為240/1.5=160dpi(橫向)或
320/2=160dpi(縱向),160dpi就是這部手機的像素密度,像素密度的單位dpi是Dots Per
Inch的縮寫,即每英寸像素數量。橫向和縱向的這個值都是相同的,原因是大部分手機屏幕使用正方形的像素點。

不同的手機/平板可能具有不同的像素密度,例如同為4寸手機,有480x320解析度的也有800x480解析度的,前者的像素密度就比較低。
Android系統定義了四種像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它們對應的dp到px的系
數分別為0.75、1、1.5和2,這個系數乘以dp長度就是像素數。例如界面上有一個長度為「80dp」的圖片,那麼它在240dpi的手機上實際顯示
為80x1.5=120px,在320dpi的手機上實際顯示為80x2=160px。如果你拿這兩部手機放在一起對比,會發現這個圖片的物理尺寸「差不
多」,這就是使用dp作為單位的效果,見下圖。

更新20140701:
是不是所有android手機的屏幕寬度用dp衡量都是固定值(例如320dp)呢?答案是否定的,如果寫一個程序畫寬度等於320dp的橫線,在不同手
機上運行,會發現在有些手機上橫線比手機屏幕短,有些則比屏幕長,在平板上與手機上相比差別則更加明顯。

dip:

與dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,後來為了與sp統一就建議使用dp這個名字了。

sp:

與縮放無關的抽象像素(Scale-independent
Pixel)。sp和dp很類似但唯一的區別是,Android系統允許用戶自定義文字尺寸大小(小、正常、大、超大等等),當文字尺寸是「正常」時
1sp=1dp=0.00625英寸,而當文字尺寸是「大」或「超大」時,1sp>1dp=0.00625英寸。類似我們在windows里調整字
體尺寸以後的效果——窗口大小不變,只有文字大小改變。

還有幾個比較少用到的尺寸單位:

mm:

即毫米;

in:

即英寸,1英寸=2.54厘米(約);

pt:

1pt=1/72英寸=0.035厘米;
最佳實踐,文字的尺寸一律用sp單位,非文字的尺寸一律使用dp單位。例如textSize="16sp"、layout_width="60dp";

❻ 這一次要幫你徹底搞明白px、ppi、dot、dpi、sp、dp、pt

這一次要幫你徹底搞明白px、ppi、dot、dpi、sp、dp、pt 這是初級設計師經常弄混淆的幾個概念,下面我以「基本概念,易混淆的點,從問題入手,總結」四個方面來聊一聊 Px,ppi;dot,dpi; sp,dp;pt 那些事兒。 一、px,ppi;dot,dpi; sp,dp;pt 的基本概念 1. px:像素 1像素實際上是一個顏色點,所以又稱像素點。大量不同顏色點組成一張圖像,因此圖像的基本單位是像素px(沒有比像素更精細的單位了)。 像素主要用來表示圖像大小和顯示器解析度(如1920*1080px)。像素本身的物理尺寸不固定,所以它的物理尺寸沒有意義,有意義的是它的數量。 為什麼像素的物理尺寸不固定? 像素本身不是物理世界的單位,是一個相對單位,尺寸可大可小。在高密度的屏幕上像素會變小,顯示效果更清晰。因為「像素量px = 像素密度ppi x 屏幕尺寸in」,同樣是1英寸的屏幕,密度越大,像素越多,則單個像素的物理尺寸越小。 都是圖片相關信息,圖片體積和像素有什麼關系? 通常所說的100KB的圖片指的就是圖片的體積,首先一張圖像在存儲時,會描述每個像素點的顏色信息、位置、數量,這些描述數據就是圖像的體積,如果像素越多自然圖像體積越大。假如一張圖片都是一個顏色,圖像在保存時就會壓縮,只存一個像素點的顏色信息,這樣的圖像體積會小很多。所以,像素點越多,顏色越復雜,圖像體積越大。 為什麼我們要買高像素的相機? 日常我們所說的幾百萬像素的相機,這個幾百萬像素指的是拍攝最大像素量照片時,圖像寬高位置上像素量的乘積。如果像素量大,將來印刷或者在顯示器上查看,在1英寸上就有足夠多的像素顯示,像素密度增加,圖像也會更清晰。因此,我們更願意買高像素的相機。 總結: 像素px常用來描述圖像尺寸和顯示器解析度。 2. ppi:像素密度(pixel per inch) 1英寸屏幕上顯示的像素量,密度單位。決定圖片的物理顯示尺寸,只有涉及到顯示才有意義。值越大,顯示越細膩。 計算公式: ppi=屏幕對角線上的像素量px/對角線長度inch = √(屏幕橫向像素^2 + 屏幕縱向像素^2)/對角線長度。 為什麼說ppi決定圖片的物理尺寸? 一個手機的顯示屏在出廠時就確定了PPI的值,PPI越大,顯示越高清。圖片的物理尺寸 = PPI * Px,通常一張圖像的px確定,ppi越大,則它的物理尺寸越小。所以為什麼我們在高PPI的手機上,人眼看到的圖像比低PPI的圖形小。在設計行業,我們會針對高PPI的手機,設計更大像素的圖像也是這個道理。 日常所說的解析度有兩個概念,一個指顯示器的解析度,另一個指圖像的解析度。顯示器解析度指顯示器所能顯示的像素多少(1920px*1080px),顯示器可顯示的像素越多,畫面就越精細,因為屏幕尺寸一定,解析度越大,像素密度越大。顯示器解析度都用(1920px*1080px)這種形式表示,清晰度還需要結合屏幕尺寸計算。圖像解析度則是單位英寸中所包含的像素點數,比如photoshop 里新建畫布時設置的圖像解析度72ppi,其定義更趨近於解析度本身的定義 注意: 同一顯示屏上查看圖片,像素量越大,圖片尺寸越大。 顯示解析度一定的情況下,顯示屏越小圖像越清晰(比如MacBook),反之,顯示屏大小固定時,顯示解析度越高圖像越清晰。 對於設計師來說像素密度很重要,需要很據像素密度來切圖和適配,理解了像素密度的意義,就理解了幾倍圖之間的關系。 3. dot:墨點 印刷品的最小單位,表示一個印刷顏色點,類似px,只有相對大小,用在印刷行業。 4. dpi:列印解析度 (dot per inch) 1英寸上列印的墨點數量,密度單位,只用在印刷行業,值越大,印刷越精細。 注意: 與安卓的dp完全沒關系。 印刷行業相關的單位是dot,dpi。印刷尺寸(英寸)=列印墨點數(dot)/列印機密度(dpi)。 照片的清晰度,是由列印機解析度決定的。所以一張照片包含的像素越多(需要高像素照相機拍攝),高dpi列印機就可以列印出清晰的圖片。如果照片像素量px一定, 列印機的dpi越高, 則列印尺寸越小。(這里可設置為dot=px) 5. pt:點(印刷) 大小為1/72英寸=0.35mm,單位是英寸,是物理長度單位,大小固定,絕對單位。源於活字排版時代,photoshop里的字體單位就只這個。 公式: 1pt= (PPI / 72) px。 當photoshop中新建畫布的解析度為72ppi,由公式,則1pt=1px。當解析度為144ppi時,1pt=2px。 注意: 這里指印刷行業的pt哦! 6. pt: 點(iOS) iOS系統開發單位,是獨立像素的意思,長度固定,不隨屏幕像素密度ppi變化而變化。 蘋果公司規定:普屏時1px=1px,而普屏的ppi=163像素/英寸,那麼pt=1/163英寸=0.16mm(固定值)。普屏1px=1px,高清屏1pt=2px。 用固定長度pt作為開發單位的好處是,這樣可以保證同一張圖片在不同設備上顯示大小一樣,因為pt值是固定的。高清屏上1pt等於更多的像素px,因為像素在高清屏上變小,所以pt還是固定的。 7. dp:長度(Android) (Density-independent pixel) 是安卓開發用的長度單位。 根據不同的屏幕解析度,與px有不同的倍數關系。規定:1dp等於屏幕像素密度為160ppi時1px的長度,因此dp在整個系統大小是固定的。公式:1dp=(屏幕ppi/ 160)px。 1dp等於屏幕像素密度為160ppi時1px的長度,即,在mdpi時,1dp = 1px。 以mdpi為標准,這些屏幕的密度值比為: ldpi : mdpi : hdpi : xhdpi : xxhdpi = 0.75 : 1 : 1.5 : 2 : 3。android中清屏1dp=1px,高清屏1dp=1.5px,超清屏1dp=2px。 做設計時以xhdpi為模板, xhdpi條件下1dp=2px,標注長度的時候,將長度像素除以2即為dp值,這樣方便和開發溝通。 8. sp:大小(Android) (scale-independent pixel) 安卓開發用的字體大小單位。 注意: dp和sp都是安卓開發的單位,dp是長度單位,sp是字體單位。一般情況下可認為sp=dp。 二、易混淆的點 px和dot 都是點的概念,px應用在電子顯示設備上,是顯示圖像的基本單位。dot應用在印刷行業,是列印圖片的基本單位。 ppi和dpi ppi和dpi無關系,互不影響 。 ppi影響圖像的顯示尺寸,dpi影響圖像的列印尺寸。列印時可以讓數量上px=dot,則設計時在photoshop里設置的ppi大小,可以認為是dpi大小。 很多技術人員經常把ppi和dpi畫等號, 其實他們的物理意義不一樣,但是因為混淆的人多了,所以在電子屏幕顯示中提到的ppi和dpi我們可以認為是一樣的。 pt和dp iOS系統的pt和Android系統的dp概念是相似的。 三、從問題入手深入理解概念 1.設計印刷品時,為什麼說在ps里設置的ppi沒有實際意義,但還是要設置呢? 首先我們要明白,列印的解析度dpi是由實際的列印機決定的,所以在ps里設置解析度根本沒有意義。但是我們可以預期列印效果,比如多大的解析度和尺寸,有了這兩個值就能確定像素量px,即,只要像素量滿足要求,就能列印出預期的效果。所以ps里設置解析度ppi是為了讓ps計算出像素量大小。 2.photoshop里,高ppi和低ppi畫布的顯示差別? Photoshop里的顯示大小隻和圖像的像素量和顯示器解析度有關。顯示器是確定的,所以像素量越大,顯示尺寸越大。 3.photoshop里, 相同像素的圖像,高ppi圖像拖入到低ppi圖像里,高ppi的圖像變小, 為什麼? 因為拖入後,高ppi的文檔分辨變小,photoshop把圖像的像素按照ppi變小的比例變小。這樣里體現了不同ppi的圖像在photoshop里的轉換關系。 4.photoshop里,相同像素的圖像,低ppi圖像拖入高ppi圖像里,低ppi的圖像無變化,為什麼? 因為拖入後,低ppi的文檔分辨變大,photoshop把圖像的像素按照ppi變大的比例變大,這樣就超過了畫布尺寸,photoshop按照置入圖片的原理顯示,即按最大邊匹配。 5.使用軟體的方式,增加圖像的像素px,或者提高圖像的像素密度ppi,對圖像有什麼影響? 軟體增加圖片像素,圖片會變模糊,因為增加的不是有效像素,所謂高清圖是指包含有效像素多的圖片。顯示清晰度由顯示器本身決定,圖片的ppi沒有意義。 6.100*100px的圖片,ps改變它的ppi,會怎樣? 像素是確定的,即不會影響顯示,也不會影響印刷。 四、總結 1.手機設計稿 因為手機屏幕的ppi和英寸確定,那麼像素可計算出來,即px確定,只需設置ps的畫布像素px相同就可以了,ps里設置的ppi對手機設計稿而言並沒有什麼意義,可以隨便設置;手機只關注圖片的像素夠不夠,因為是按照手機1:1的像素設計。所以,適配高ppi手機的設計稿,修改ps的ppi是沒有用的,而應該按照高ppi的像素修改設計稿。 2.列印設計稿 列印尺寸和列印解析度300dpi確定, 但ps以px為單位,由公式dot=英寸*dpi,px=英寸*ppi,英寸相同, dpi=ppi=300,那麼數量上可以dot=px。ps的英寸和ppi確定, px也確定,但不能直接得出px數量,但是ps可直接設置厘米cm, 那就只需要設置寬高的厘米和解析度300ppi=118.11像素/厘米,就可以間接設置所需的像素量,這就能保證300dpi清晰度和列印尺寸。(設置300dpi時ps會自動轉化為118.11像素/厘米)

❼ android安卓系統dp/sp/px換算表比率 ratexxxhdpi是多少

首先要明確兩點,什麼是dpi?什麼是dp?
dpi
=
dots
per
inch(每個inch上有多少個點)
160dpi的屏幕,1dp
=
1px,也就意味著1dp
=
1/160
inch。
所以每個inch上的點數越多(點的密度越大),每個dp對應的px也就越大
dp/sp可以認為是相同的,不過sp通常用於設置字體大小,而dp用於尺寸。
dp/sp與px換算,是和設備的density相關的,dp
*
density
(密度)=
px。
float
density
=
Resources.getSystem().getDisplayMetrics().density;
所謂的xhdpi,其dpi並不是某一固定取值,只要在240~320dpi范圍內的都認為是xhdpi(mdpi/hdpi/xhdpi/xxhdpi類似)。
所以同樣是xhdpi的手機,dp和px的轉換也是不同的。

❽ Android中dip,dp,sp,pt和px的區別

Android中有很多度量單位:比如常用的dp,dip,sp,px等,有時候需要將他們相互轉換,有下面非常方便的方法:

❾ Android 關於"尺寸"的那些事(dp,dip,sp,pt,px...)

屏幕大小:屏幕大小是手機對角線的物理尺寸,以英寸inch為單位。比如我的Mix 2手機屏幕大小為5.99 inches,意味著我的屏幕對角線長度為5.99inches = 5.99 * 2.54 = 15.2146cm

解析度:屏幕的像素點數,一般表示為a*b。例如某手機解析度為21601080,意味著手機屏幕的豎直方向(長)有2160個像素點,水平方向(寬)有1080個像素點。

px :Pixels ,像素;對應屏幕上的實際像素,是畫面中最小的點(單位色塊),像素大小沒有固定長度值,不同設備上1個單位像素色塊大小不同。

這么說可能有點陌生,用屏幕解析度來說,今年流行起來的「全面屏」解析度是 2160*1080,但是你也可以發現,雖然很多全面屏手機解析度一樣,但是明顯看得出來屏幕大小不一樣,這也解釋了「不同設備像素色塊大小是不同的」。

pt :1pt=1/72 inch,用於印刷業,非常簡單易用;

dpi :Dots Per Inch,每英寸點數;詳見ppi

ppi :Pixels Per Inch,每英寸像素數;數值越大顯示越細膩。計算式:ppi = 屏幕對角線像素數 / 屏幕對角線長度。

還是舉全面屏的例子,解析度2160*1080,屏幕大小是5.9inches,勾股定理可以得到對角線像素數大約是2415,那麼ppi = 2415 / 5.99 = 403.

事實上dpi 和 ppi 一定程度上可以劃等號,都表示像素密度,計算方式完全一致,只不過使用場景不一樣。dpi中的dots點屬於列印或印刷等領域,例如drawable 文件對應的就是dpi,而ppi中的pixel屬於屏幕顯示等領域

dp/dip : Density-independent Pixels,密度無關像素 - 基於屏幕物理密度的抽象單位。1dp等於 160 dpi 屏幕上的dpx,這是 系統為「中」密度屏幕假設的基線密度。在運行時,系統 根據使用中屏幕的實際密度按需要以透明方式處理 dp 單位的任何縮放 。dp 單位轉換為屏幕像素很簡單:px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等於 1.5 物理像素。在定義應用的 UI 時應始終使用 dp 單位 ,以確保在不同密度的屏幕上正常顯示 UI。

如果看完文章還是覺得很懵,那麼可以直接記住: 1dp單位在設備屏幕上總是等於1/160 inch。

sp :Scale-independent Pixels ,與 dp 單位相似,也會根據用戶的字體大小偏好進行縮放。

首先我們放上源碼中對尺寸單位的轉換

可以看到,輸入值類型為dp時,返回 value * DisplayMetrics.density,到這里我們可能會發懵:嗯?不對啊,前面我們不是通過px 和 dp 的換算公式來計算的么,怎麼這里就簡簡單單乘了一個DisplayMetrics.density?不要慌,我們先看看源碼中對DisplayMetrics.density的介紹。

源碼注釋中說到「在160dpi的屏幕下,density的值為1,而在120dpi的屏幕下,density的值為0.75」,我們可以大膽的猜測一下,120dpi下的density=0.75的原因是120dpi * 1 /160dpi=0.75。實際上,也就是這么回事。我們下面會仔細的分析。

需要補充一下,通常意義上Android 屏幕的密度,指的是像素密度dpi/ppi,對應於源碼中的DisplayMetrics.densityDpi。

為什麼引入dp?

Android 引入了dp這一單位,使得不論多大屏幕,多大dpi,顯示的效果始終保持一致。

但是根據前面我們提到的px與dp的換算公式px = dp * (dpi / 160),很顯然,由於相同解析度但不同屏幕大小的設備dpi是不同的,導致px和dp的基本不存在一個固定的換算關系,為了方便屏幕適配,Android設置了6個通用的密度,換算px與dp時採取通用密度計算,而非設備實際的密度。

以下為6種通用密度,以及其最小的解析度

得到上面通用密度之後,我們換算dp與px多了一種簡便方式。前面我們提到Android將mdpi作為基準,此時1px = 1dp,又有px = dp * (dpi / 160),所以我們可以很容易的得到以下換算:

還記不記得前面源碼中的density屬性,實際上DisplayMetrics.density = dpi / 160 ,表示的就是在某個通用密度下dp與px的換算比(1dp/1px的值)

這部分其實和程序員自身已經關系不大了,畢竟參與工作之後這些都是UI人員的活兒了。不過鑒於現在我還只是一枚在校生,還是記下來以免自己遺漏吧。

建議在xhdpi中作圖

原因嘛,首先現在主流解析度是1080p,以及最近流行起來的全面屏18:9,而xhdpi對應720p,向低dpi兼容自然沒問題,即便在xxhdpi中顯示,也會有個不錯的效果。而如果以1920*1080作圖,顯然圖片素材佔用的內存很大,而且也會增大應用安裝包的大小。

只有一個原則:資源放入對應dpi的文件夾中,Android會機智的載入合適的資源。

以drawable資源為例:

我們平時開發小項目&對UI要求不高時,只使用一套xhdpi的資源就足夠了,雖然這可能會導致在hdpi及以下的手機中有些卡頓,因為xhdpi的圖片運行在hdpi及以下的手機上會比較吃內存,不過無傷大雅。

而如果不為圖片資源犯愁時(有UI人員的支持,就是任性),就可以添加所有dpi的資源。當然,重點還是要滿足ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12的規律。

好像說了不少廢話,哈哈,大概就這么多吧。

❿ dp、sp、px區別[完整]

做移動設計的同學,不管是原生app或者web app,應該對字體字型大小都是很頭痛的問題。根本原因是,我們用唯一解析度的電腦,設計各個不同尺寸大小解析度的設備,那簡直要瘋掉了。

但不要著急,我們先來理解一下一些名詞:

我們一般會碰到的度量單位主要有:dpi、ppi、dp、sp、px、pt、in。其中,px應該各位最熟悉的單位,也是我們主要使用的photoshop或者axure等工具用的度量單位,而它在移動端時,的確已經「過時」了。但不要著急把它丟掉,因為它是接下來非常重要的換算單位(所有手機參數還是用px在表達)。

dpi和ppi這兩個是密度單位,不是度量單位,而這兩個恰恰是我們換算中重要的分母。簡單理解一下:

ppi (pixels per inch):圖像解析度 (在圖像中,每英寸所包含的像素數目)

dpi (dots per inch): 列印解析度 (每英寸所能列印的點數,即列印精度)

dpi主要應用於輸出,重點是列印設備上。

我們在移動應用中提到ppi和dpi其實都一樣(概念不同,但對設計來講沒有特別需要深入了解),所以我們先忽略掉dpi。而ppi的運算方式是:

PPI = √(長度像素數² + 寬度像素數²) / 屏幕對角線英寸數

舉個簡單的栗子,iphone5的ppi是多少?ppi=√(1136px² + 640px²)/4 in=326ppi(視網膜Retina屏).這樣大家就能夠明白ppi和px的關系。

這里還提到in(英寸)這個詞,這個非常重要,因為現實中我們經常提到4英寸手機或者5.5英寸大屏手機,而這個尺寸是用戶真正感受到的物理大小,所有提到不同尺寸的屏幕不僅僅是解析度或者像素,而更多的是英寸。

好,現在關鍵的來了,dp、sp、pt,是我們設計中的關鍵。

dp:Density-independent pixels,以160PPI屏幕為標准,則1dp=1px,dp和px的換算公式 :

dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。

sp:Scale-independent pixels,它是安卓的字體單位,以160PPI屏幕為標准,當字體大小為 100%時, 1sp=1px。

sp 與 px 的換算公式:sp*ppi/160 = px

是不是看起來dp和sp一樣,在Android設計原則中,有提到這兩個單位,他建議文字的尺寸一律用sp單位,非文字的尺寸一律使用dp單位。例如textSize="16sp"、layout_width="60dp"。

為什麼要把sp和dp代替px?最簡單的原因是他們不會因為ppi的變化而變化,在相同物理尺寸和不同ppi下,他們呈現的高度大小是相同。也就是說更接近物理呈現,而px則不行。

但問題來了,ps或者axure裡面沒有sp或者dp這個選項啊,怎麼辦?看到網上有人說用pt去替換px(pt是物理高度,1in=72pt)。 補充一下自己推算的pt轉換px的公式,不一定對,可以參考:例如9pt,再96dpi下,那麼就是9 * 1/72 * 96 =12px。而在72ppi下,9pt=9px。

我再來做個小小的實驗:

1、先了解清楚你筆記本的ppi,比如我的macbook air是11.6英寸,1366 x 768解析度,那麼它的ppi就是135ppi。

2、然後新建一個頁面,輸入的ppi值就是你電腦的ppi值。我們先來看看不同ppi值在電腦上呈現的字體大小是怎麼樣的:

我用的都是arial 14點 (註:專家指正這里不是px而是pt,點) 的字體,但在320ppi、160ppi、135ppi(我自己的)以及標准72ppi下的大小,截然不同。

好,我們再來看看,在電腦上直接截圖web頁之後對比的效果:

你會驚訝的發現,只有72ppi是正常的,其他字體都不對了,因為原本的web設計是不用考慮dp、sp或者ppi的,它是直接px作為物理單位的,而點在72ppi下(1pt x 1/72 x 72dpi=1px)是正常顯示的。所以我們以前做web的時候根本不用擔心自己的設計在別人電腦上看起來會很大或很小。 當然其實像firefox是用96dpi,也就是9pt=12px。

但我再截一下用iphone訪問web之後的圖:

好吧,這時候,你就發現72ppi是見鬼了,因為這個字體在手機上看到完全地小了,所以做移動設計不要傻乎乎地還用72ppi了,不然你很難判斷效果。(當然你也可以藉助我之前提到的同屏工具來映像到移動設備上查看效果,但這個其實會很麻煩很麻煩很麻煩...)

但是到底是選160ppi還是135ppi呢?如果選了135ppi那在別人的電腦上會怎麼樣呢?是不是又要重新調?其實不用,我借用另外一台Retina的macbook pro做了相同的測試,你會發現,其實和屏幕ppi無關,和你在ps里設定的解析度有關。

[補充,有位專家指出我的不對,就是在點和px上我搞錯了,我又嘗試了一下,如果是px的話,不同ppi下字體大小是不變的,而點(pt)的話會有變化。

並且如果是用pt來代替px的話,為了整除方便,那麼ppi一定要設置成72的倍數,比如144ppi,上圖裡面160ppi則會除不盡,所以上圖其實160ppi的字體還是和截圖字體有些許差異。]

然後有專家提出,iOS下是用pt作為字體單位,而Android是以sp作為字體單位,而且web app還是以px作為字體單位。怎麼樣讓設計和輸出單位是一致的?我之前給出的解決方案並不十分嚴謹易懂,所以我重新編輯了一下。

為了求證移動字型大小的問題,跑了一圈同事,最後只能暫時得出一些「不一定正確」的結論:

1、字型大小行業標准幾乎沒有,不像web一樣,宋體12px、14px這樣很清楚。我唯一找到的只有Android的設計建議:

圖中 原作者 還換算了一下在240ppi下對應的px值。

而我問了一圈同事,基本上現在設定字型大小都是憑感覺做事的。當然你也可以參考Android這個標准。

2、如何在電腦上快速預覽高清內容是否排版合理,我想到最簡單的一點就是縮放psd,縮放的比例很關鍵,要達到物理尺寸,首先你得知道你電腦的解析度,我的解析度是135ppi,如果要看解析度是326的iphone上的效果,就縮小到135/326≈41.4%,你就會發現物理尺寸非常接近。可以看看一些排版上的問題。當然你也可以 裝一些工具 來達到更好的效果。

3、怎麼和開發溝通你的字體大小?我也沒有特別好的辦法,就簡單分成3塊來說:

iOS,你設計的時候字體記得用「點」,然後ps設定解析度用標準的72ppi即可,因為據同事說,這樣下的pt值是准確的,或者說iOS自動會轉換這個值。具體也需要大家操作了才知道。而這個解析度下1pt=1px,我簡單換算了一下sp->px->pt的尺寸:

12sp=24.45px=24.45pt;14sp=28.52px=28.52pt;18sp=36.67px=36.67pt;22sp=44.88px=44.88pt;

但這個小數點實在難受,所以四捨五入取整數,並且為了保證可以整除,那麼可以是24pt、28pt、36pt、44pt。

Android,你就用標准sp就好了,當然其他圖片等尺寸你可以用dp來表述。

Web app,這個我也找不到答案,因為Web app還會涉及到響應式設計,而且前端會用em去表示字體比例。所以同樣,如果你用72ppi解析度做的話,直接可以把對應的字型大小告訴開發就好了,當然最好你所用到的字型大小是倍數關系,最小倍數是0.25,這樣用em去做比例的時候會更容易些。比如12px、16px、24px、32px這樣。

有關字體字型大小的研究已經有同事在做,以後有結論了再和大家分享。

原網址:https://zhuanlan.hu.com/zhezhexiong/19565895

熱點內容
安卓手機相機出故障怎麼辦 發布:2025-05-16 06:47:11 瀏覽:456
華為如何給特定軟體設置密碼 發布:2025-05-16 06:44:09 瀏覽:467
內存和緩存的區別 發布:2025-05-16 06:42:42 瀏覽:188
配電車編程 發布:2025-05-16 06:41:22 瀏覽:370
安卓微信淺色模式怎麼恢復 發布:2025-05-16 06:27:53 瀏覽:240
美嘉演算法口訣 發布:2025-05-16 06:03:15 瀏覽:953
c程序編譯連接 發布:2025-05-16 06:02:36 瀏覽:965
腳本魔獸 發布:2025-05-16 06:01:52 瀏覽:331
文件夾python 發布:2025-05-16 06:01:43 瀏覽:628
電腦我的世界伺服器游戲幣 發布:2025-05-16 05:27:25 瀏覽:491