2013-02-19 72 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会为您进行转换。

相关问题