導航:首頁 > 操作系統 > android單位轉換

android單位轉換

發布時間:2024-02-28 14:57:12

① iOS、android 開發單位換算及 UI 切圖要求

在移動端 UI 設計中,經常會用到的單位有 4 種:px、pt、dp 和 sp,很多人分辨不清這幾種單位及其換算關系,以及 iOS 和 Android 的切圖要求,我在這里做下簡單的介紹,希望大家讀完後能有所收獲(如有錯誤,歡迎糾正)。

px 即 pixel,像素點,電子屏幕上組成圖像的最基本單位,在描述屏幕解析度時也會使用該單位。1px 表示一個像素,例如 iPhone 8 的尺寸為 750px × 1334px,表示在該手機屏幕上,水平方向每行有宴握 750 個像素點,垂直方向每列有 1334 個像素點。

pt 即 point,有兩個含義:一是印刷行業常用單位,是一個標准長度單位,絕對大小,1pt = 1/72 英寸 = 0.35mm;二是 iOS 開發用的基本單位,當設計師以 1 倍尺寸進行設計 (375pt × 667pt) 並給出標注稿時,開發人員無需除以 2 便可直接使用。

dp 是安卓開發用的基準單位,在 dpi (屏幕像素密度,即每英寸包含的像素點) 為 160 的屏幕為上,1dp = 1px。為了簡單起見,Android 把屏幕密度分為了 5 種:mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi,下文會詳細介紹其換算關系。

安卓系統里,sp 與 dp 類似,不同的是 sp 可以根據用戶的字體大小首選項進行縮放,晌告慶友老而 dp 則不會。 盡量使用 dp 作為空間大小單位,sp 作為文字相關大小單位,例如:新聞類和簡訊類等大篇幅文本,推薦使用 sp 為單位。

在 iOS 開發中,不同機型的 iPhone 設備需要用到不同倍率的切圖,下表格為各 iPhone 機型顯示屏參數對比:

這里再簡單了解下兩個概念,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?可能要問問蘋果了...)

依此類推,得出換算公式一:

若有小數,四捨五入即可。

在 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 所示。

在 Android 開發中,因為機型參差不齊,需要用屏幕密度來區分設計。

注意,這里的 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。

依此類推,得出換算公式二:

在設計圖標時,對於 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

② Android UI里1px等於多少dp

dp、sp和px的區別:現在這里介紹一下dp和sp。dp也就是dip。這個和sp基本類似。如果設置表示長度、高度等屬性時可以使用dp
或sp。但如果設置字體,需要使用sp。dp是與密度無關,sp除了與密度無關外,還與scale無關。如果屏幕密度為160,這時dp和sp和px是一
樣的。1dp=1sp=1px,但如果使用px作單位,如果屏幕大小不變(假設還是3.2寸),而屏幕密度變成了320。那麼原來TextView的寬度
設成160px,在密度為320的3.2寸屏幕里看要比在密度為160的3.2寸屏幕上看短了一半。但如果設置成160dp或160sp的話。系統會自動
將width屬性值設置成320px的。也就是160 * 320 / 160。其中320 /
160可稱為密度比例因子。也就是說,如果使用dp和sp,系統會根據屏幕密度的變化自動進行轉換。

下面看一下其他單位的含義

px:表示屏幕實際的象素。例如,320*480的屏幕在橫向有320個象素,在縱向有480個象素。

in:
表示英寸,是屏幕的物理尺寸。每英寸等於2.54厘米。例如,形容手機屏幕大小,經常說,3.2(英)寸、3.5(英)寸、4(英)寸就是指這個單位。這
些尺寸是屏幕的對角線長度。如果手機的屏幕是3.2英寸,表示手機的屏幕(可視區域)對角線長度是3.2*2.54 =
8.128厘米。讀者可以去量一量自己的手機屏幕,看和實際的尺寸是否一致。

mm:表示毫米,是屏幕的物理尺寸。

pt:表示一個點,是屏幕的物理尺寸。大小為1英寸的1/72。
原帖地址http://www.ophonesdn.com/forum/thread-1946-2-1.html

px(Pixels ,像素):對應屏幕上的實際像素點。例如,320*480的屏幕在橫向有320個象素,在縱向有480個象素。

in(Inches

,英寸):屏幕物理長度單位。每英寸等於2.54厘米。例如,形容手機屏幕大小,經常說,3.2(英)寸、3.5(英)寸、4(英)寸就是指這個單位。這
些尺寸是屏幕的對角線長度。如果手機的屏幕是3.2英寸,表示手機的屏幕(可視區域)對角線長度是3.2*2.54 =
8.128厘米。讀者可以去量一量自己的手機屏幕,看和實際的尺寸是否一致。

mm(Millimeters ,毫米):屏幕物理長度單位。

pt(Points ,磅):屏幕物理長度單位, 表示一個點,是屏幕的物理尺寸。大小為1英寸的1/72。

dp(與密度無關的像素):邏輯長度單位,在 160 dpi 屏幕上,1dp=1px=1/160英寸。隨著密度變化,對應的像素數量也變化,但並沒有直接的變化比例。
dip:與dp相同,多用於Google示例中。
sp(與密度和字體縮放度無關的像素):與dp類似,但是可以根據用戶的字體大小首選項進行縮放。

盡量使用dp作為空間大小單位,sp作為和文字相關大小單位

③ 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的規律。

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

④ px、dp、sp、dpi之間的區別和轉換

px、dp、sp、dpi之間的區別和轉換

區別:

px (pixels)像素 -- 是像素,就是屏幕上實際的像素點單位。(一般UI人員在ps中經常使用)

dp/dip 設備獨立像素,android layout經常使用的尺寸單位,與設備屏幕有關,dp是虛擬像素,在不同的像素密度的設備上會自動適配。即與像素密度無關。

sp 放大像素,主要是處理字體的大小

dpi:Android支持四種不同的dpi模式:ldpi mdpi hdpi xhdpi

hdpi裡面存放高解析度的圖片,如WVGA (480x800),FWVGA (480x854)

mdpi裡面存放中等解析度的圖片,如HVGA (320x480)

ldpi裡面存放低解析度的圖片,如QVGA (240x320)

轉換:

a.首先了解常見的解析度Resolution:

解析度:指手機屏幕垂直和水平方向上的像素個數。比如解析度是480*320,則指設備垂直方向有480個像素點,水平方向有320個像素點。

VGA 顯示繪圖矩陣 640×480

HVGA half 480×320

QVGA quarter 320x240

b.dpi像素密度,指每英寸中的像素數,該值對應於DisplayMetrics類中屬性densityDpi的值

(例子:設備解析度為320*240,屏幕長2英寸寬1.5英寸 dpi=320/2=240/1.5=160)

c.density屏幕密度,指每平方英寸中的像素數,在DisplayMetrics類中屬性density的值為dpi/160(用這個進行dp sp之間的轉化)

如圖:

d.px 和 dp 互轉換

計算公式:實際像素數px=1dp*像素密度(dpi)/160 =dp*density

在320x480解析度,像素密度dpi為160,1dp=1px

在480x800解析度,像素密度dpi為240,1dp=1.5px

/**

* 根據手機的解析度從 dp 的單位 轉成為 px(像素)

*/

public static int dip2px(Context context, float dpValue) {

final float scale = context.getResources().getDisplayMetrics().density;

return (int) (dpValue * scale + 0.5f);

}

/**

* 根據手機的解析度從 px(像素) 的單位 轉成為 dp

*/

public static int px2dip(Context context, float pxValue) {

final float scale = context.getResources().getDisplayMetrics().density;

return (int) (pxValue / scale + 0.5f);

}

閱讀全文

與android單位轉換相關的資料

熱點內容
android兼容測試工具 瀏覽:92
雲伺服器不支持虛擬化怎麼辦 瀏覽:189
加密方式的演變 瀏覽:364
java常用演算法pdf 瀏覽:734
伺服器數據遇到異常什麼原因 瀏覽:450
phpexif信息 瀏覽:542
單片機三位元組浮點數 瀏覽:756
命令與征服泰伯利亞戰爭下載 瀏覽:378
c窗口界面編程 瀏覽:23
hypermill編程能做模板嗎 瀏覽:782
計算機網路最經典的演算法 瀏覽:628
華為思科的配置命令 瀏覽:869
linux設置光碟啟動 瀏覽:361
程序員俱樂部注冊 瀏覽:19
洗潔精雞蛋盤解壓視頻 瀏覽:294
企業內網加密app 瀏覽:51
騰訊雲伺服器怎麼設置本地網路 瀏覽:625
日常程序員 瀏覽:515
哪個pe有bit加密功能 瀏覽:111
rust伺服器是用什麼ip 瀏覽:694