在代码和资源中设置TextView字体大小时不一致

时间:2011-07-22 00:13:49

标签: android dialog dimension text-size

official documentation似乎没有回答这个问题,或者我无法理解。

元素(不管AlertDialog,它也会在任何TextView上发生):

TextView tv = (TextView) dialog.findViewById(android.R.id.message);

不一致。案例A:

tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
// or tv.setTextSize(14); does the same

案例B:

tv.setTextSize(getResources().getDimension(R.dimen.text_size_small));
// TypedValue makes no difference either.

其中values/dimens.xml有:

<dimen name="text_size_small">14sp</dimen>

结果:字体大小不一样,从资源检索时显得更大。我可能错过了什么,所以我的错误是什么,最重要的是:为什么?

- 更新至第一个答案 -

固定数字只是一个例子,因为没有人会在代码中硬编码固定的字体大小。所以让我重新解释一下这个问题:

为什么如果从代码中获取资源,文本大小比从XML布局获取资源时要大?此外,问题仍然是相同的:如何检索14sp代码中的单元并使其与布局XML中设置的14sp单元保持一致?我没有接受答案,因为它没有告诉我如何在代码中使用资源中的sp单位来表示文本大小。

在此布局上,字体大小不同,即使尺寸相同:

<TextView
            android:id="@+id/my_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/TextBody" />

styles.xml:

<style name="TextBody">
    <item name="android:textSize">@dimen/text_size_small</item>
    <item name="android:lineSpacingMultiplier">1.1</item>
    <item name="android:textColor">@color/body_text_1</item>
    <item name="android:textIsSelectable">true</item>
    <item name="android:linksClickable">true</item>
</style>

请参见text_size_small吗?为什么在这种情况下字体大小比代码中的小,使用相同的dimen资源?

3 个答案:

答案 0 :(得分:102)

您应该使用setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);因为getDimension方法的文档声明它返回Resource dimension value multiplied by the appropriate metric.,我理解这是预先计算的绝对px值。

即,使用:

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_size_small));

答案 1 :(得分:23)

不知怎的,这似乎很合适:

XML:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="typo14">9sp</dimen>
</resources>

爪哇:

setTextSize(TypedValue.COMPLEX_UNIT_SP, 9);
setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.typo14));

答案 2 :(得分:2)

这是sp px dpi

的问题
tv.setTextSize(14) = 14 pixels