1

我无法理解 dimen 资源属性。

我有 3 个值文件夹:value-normal、value-large 和 value-xlarge。

我已将 titlesize 定义为 20 for normal、25 for large 和 30 for xlarge,这是我的正常值文件:

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

但是当我试图得到这个值时

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

tvTitleSize 等于 40,这是偏大的。为什么价值是原来的两倍,我该如何解决这个问题?

ps:我的设备是galaxy nexus。

4

2 回答 2

3

如果您阅读方法文档Resource.getDimension(),您会发现:

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

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

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

如果您想知道,出了什么问题,那么答案是没有。你得到的尺寸是正确的。ldpi/mdpi/hdpi/xhdpi 设备的实际文本大小不同。

因此,例如 16dp 意味着:

  • 12px 在 ldpi 上
  • 在 mdpi 上为 16 像素
  • hdpi 上的 24 像素
  • xhdpi 上 32 像素

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

于 2013-02-19T08:22:00.733 回答
1

您返回的值以像素为单位。高密度屏幕上的20sp像素比低密度屏幕上的多。Android 会为您进行转换。

于 2013-02-19T08:20:15.103 回答