使用String获取的尺寸设置文本大小

时间:2013-01-01 21:11:21

标签: java android

我正在使用此函数从我的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

是否缺少任何类型转换?

1 个答案:

答案 0 :(得分:4)

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

看起来您正在应用两次dp-to-pixels转换。在hdpi设备上,比率是1.5,你得到的平方(1.5 2 * 10 = 22.5)。这是因为您致电setTextSize(textsize)。来自the docs

  

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

尝试使用:

textview.setTextSize(TypedValue.COMPLEX_UNIT_PX, textsize);