2013-02-19 115 views
1

我無法理解維度資源屬性。維度值不能像預期的那樣工作

我有3個值文件夾:value-normal,value-large和value-xlarge。

我已經定義了titlesize 20正常,25大和30 XLARGE,這是我的正常值文件:

<resources> 
    <dimen name="titleSize">20sp</dimen> 
</resources> 

但是,當我試圖讓這個值

Resources r = getResources(); 
tvTitleSize = r.getDimension(R.dimen.titleSize); 

tvTitleSize等於40,這是大的偏差。爲什麼價值是原來的兩倍,我該如何解決這個問題?

Ps:我的設備是星系連接。

回答

3

如果你讀了docs of Resource.getDimension()方法,你會發現這一點:乘以適當的度量

資源方面的價值。

換句話說,您將獲得設備的實際大小(以像素爲單位)。

sp是與密度無關的值。該值對應於mdpi,但Galaxy Nexus是xhdpi,它的密度是mdpi的兩倍。這就是爲什麼你得到20 * 2 = 40;

如果你想知道,什麼是錯的,那麼答案是什麼。你得到的大小是正確的。 ldpi/mdpi/hdpi/xhdpi設備的實際文本大小不同。

因此,例如16DP意味着:

  • 12像素上LDPI
  • 16px的上MDPI
  • 24像素上HDPI
  • 32PX上xhdpi

spdp之間的區別是sp受用戶偏好字體大小的影響。

1

您返回的值以像素爲單位。在高密度屏幕上的20sp對應於比在低密度屏幕上更多的像素。 Android會爲您進行轉換。

相關問題