0

我正在使用这个函数通过 Java 从我的 dimens.xml 文件中获取一个维度:

public static float getDimen(Context context, String name)
{
    Assert.assertNotNull(context);
    Assert.assertNotNull(name);

    Resources res = context.getResources();
    int dimensionID = res.getIdentifier(name, "dimen", context.getPackageName());

    return res.getDimension(dimensionID);
}

这类似于:getDimen(mContext, "textsize_small")并检索“R.dimen.textsize_small”值(或至少应该如此)。

<resources>
      <dimen name="textsize_small">10dp</dimen>
      <dimen name="textsize_medium">13dp</dimen>
      <dimen name="textsize_large">15dp</dimen>
      <dimen name="textsize_xlarge">17dp</dimen>
</resources>

所以,在有了这个值之后,我用它来设置 TextView 的 TextSize:

float textsize = getDimen(mContext, "textsize_" + object.getDesiredSize);
textview.setTextSize(textsize);
Log.d(TAG, "TextSize: " + textview.getTextSize());

编辑:

我设置android:textSize="@dimen/textsize_small"并使用了getDimen(mContext, "textsize_small"). 在第一个中,Log.d 返回15.0,在第二个中返回22.5

是否缺少任何类型转换?

4

1 回答 1

4

答案是正确的。您在 xhdpi 设备(标称 360 像素/英寸)上运行,并且您已将值定义为dp. 所以 10dp 是 22.5 像素(10 * 360 / 160 - 其中 160 是 dp 值缩放的默认像素密度)。换句话说,22.5 像素在屏幕上的物理尺寸与 10 像素在 mdpi(160 像素/英寸)屏幕上的物理尺寸相同。

看起来您正在应用 dp 到像素的转换两次。在 hdpi 设备上,比率为 1.5,您得到的平方是 (1.5 2 * 10 = 22.5)。这是因为您调用setTextSize(textsize). 从文档

将默认文本大小设置为给定值,解释为“缩放像素”单位。此大小根据当前密度和用户字体大小偏好进行调整。

尝试使用:

textview.setTextSize(TypedValue.COMPLEX_UNIT_PX, textsize);
于 2013-01-01T21:15:22.523 回答