Dimen值不能像预期的那样工作

时间:2013-02-19 08:15:27

标签: android

我无法理解dimen资源属性。

我有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:我的设备是galaxy nexus。

2 个答案:

答案 0 :(得分:3)

如果你阅读docs of Resource.getDimension()方法,你会发现:

  

资源维度值乘以适当的指标。

换句话说,您将获得设备的实际大小(以像素为单位)。

sp是密度无关的值。该值对应于mdpi,但Galaxy Nexus是xhdpi,其密度是mdpi的两倍。这就是为什么你得到20 * 2 = 40;

如果你想知道什么是错的,那么答案就是什么。你得到的大小是正确的。 ldpi / mdpi / hdpi / xhdpi设备的实际文本大小不同。

所以例如16dp意味着:

  • 12px on ldpi
  • 16px on mdpi
  • 24px on hdpi
  • 32px on xhdpi

spdp之间的区别在于sp受用户对字体大小的偏好的影响。

答案 1 :(得分:1)

您获得的值以像素为单位。高密度屏幕上的20sp对应的像素数多于低密度屏幕上的像素数。 Android会为您完成转换。