Android 文字繪製與 DPI 、屏幕尺寸的關係?

有安卓手機A和B,若A的dpi為a(單位dpi),屏幕物理尺寸為x(單位英寸);B的dpi為b(單位dpi),屏幕物理尺寸為y(單位英寸);若a&>b且x&


與屏幕實際尺寸無關,取決於 ROM 指定的像素密度與屏幕真實像素密度之間的關係。

編譯 ROM 時會指定像素密度的。只能指定為以下幾個值:

  • ldpi: 120ppi (mdpi x 0.75)

  • mdpi: 160ppi (android 基準 ppi, 1dp=1px)

  • tvdpi: 213.333ppi (xhdpi / 1.5)

  • hdpi: 240ppi (mdpi x 1.5)
  • xhdpi: 320ppi(mdpi x 2)
  • xxhdpi: 480ppi(mdpi x 3)

在生產 android 手機的時候,應當盡量選擇與這些 ppi 相接近的像素密度。

屏幕的真實 ppi 如果完全等於這幾個指定的 ppi,並且被指定為確定的 ppi,那麼相同 sp 的字體,最終顯示的物理大小相同。

但如果使用的不是以上一個標準 ppi,那麼最終顯示的效果與真實大小有差異,具體計算方式如下:

假如屏幕 A 是 440ppi 的,ROM 被指定為 480 ppi,那麼屏幕顯示的實際上是 480/440=1.09 倍的真實大小。

而另外一塊屏幕 B,假定是 340 ppi,ROM 被指定為 320 ppi,那麼屏幕顯示的實際上是 320/340=0.94 倍的真實大小。

因為 0.94 &< 1.09,所以,這塊 340ppi 的屏幕 B,實際的字體顯示尺寸反而比 440ppi 的屏幕 A 更小。

假定有一塊屏幕 C,像素密度是 280 ppi,ROM 被指定為 320 ppi,那麼屏幕顯示的實際上是 320/280=1.14 倍的真實大小。

因為 1.14 &> 1.09 ,這塊 280ppi 的屏幕 C,實際的字體顯示尺寸比 440ppi 的屏幕 A 更大。

至於手機的屏幕的物理尺寸,它只決定了總共含有多少個 sp,但不決定每個 sp 的大小。決定每個 sp 大小的是手機屏幕的真實像素密度,以及這款 ROM 被編譯時指定的像素密度(對 android 應用程序來說,像素密度只有指定的那幾個)。

回到題主的問題,由於沒有給出 a 跟 b 的具體值,所以此題條件不足無法解答。實際尺寸更大與更小都有可能。取決於 ROM 被編譯時指定的像素密度。


sp本身就是確保相同sp值,在不同DPI設備的字體物理大小一致

當然這個前提是屏幕真實PPI與ROM設置的屏幕DPI相一致。

可以參考Retina MBP安裝Windows 7選擇100%縮放和200%縮放的效果差別,如15寸2880x1800的屏幕使用100%縮放,則明顯屏幕PPI與系統DPI不一致,看起來所有東西都變的更小,如果設置為200%則會與普通筆記本屏幕解析度看起來一致(當然這還牽扯到縮放演算法等原因會有顯示效果細微差異)。

儘管Windows不可能為每款屏幕都設置一個DPI,但由於之前大家的屏幕PPI通常也就在那個範圍里,看起來差異不會很大。

PS:Android並不是只能選擇@pansz 提到的幾個lcd_density,MX3就設置為了400


首先與屏幕尺寸(x和y的值)沒有關係。

dp是與設備無關的虛擬像素單位,出現的目的是為了讓開發者指定同一dp值就能在不同密度的屏幕上表示相同的物理尺寸,而無需考慮實際物理像素、屏幕密度的換算關係。

sp與dp相似,是用於設定字體尺寸的虛擬單位,它與dp的區別是:Android系統支持用戶設定字體大小,所以sp還會根據用戶的這個設定再進行縮放。

(參考官方文檔:Supporting Different Densities)

dp/sp在顯示之前必然要在Android系統內部換算成物理像素值px,這是根據ROM裡面指定(build.prop)的dpi值和dp/sp的定義來換算的。

下面直接回答題主的問題:

在不考慮用戶更改字體大小選項的情況下(例如都是默認值)

如果A和B在ROM裡面實際設定的dpi值(a和b)分別與其屏幕真實的ppi值相同或很接近,那麼(無論a和b之間是什麼大小關係)同一sp值的文字,其物理尺寸在兩個手機上是相同或很相近的

如果dpi值是胡亂指定的,那就無法保證文字的顯示尺寸了。當然App開發者只需要知道有這種情況,不需要去解決它,因為這是ROM的設定錯誤。

以上我說的都是把題主說的「顯示效果」理解為物理尺寸。如果要說顯示精細程度,當然跟設備實際的ppi相關,我假定這不是提問者的本意。


軟體開發的問題建議題主去Stack Overflow或者本土版的SegmentFault,那邊軟開方面的牛人會更多。


推薦閱讀:

為什麼中國的 Android 用戶付費數量少,如何分析本地市場的影響?
如何評價2016.10.4發布的Google pixel 手機?
APP的UI設計,有沒有辦法一套切圖適配所有解析度?包括IOS、Android
對於開發者來說,Android 的開發者選項里有哪些實用的功能?
為什麼安卓系統的很多軟體都會亂自動啟動的?

TAG:Android應用 | Android開發 | Android | DPI |