64

公式ドキュメントはこれに答えていないようです、または私はそれを理解できません。

要素(を気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" />

スタイル.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この場合、同じリソースを使用しているのに、フォント サイズがコードよりも小さいのはなぜですか?

4

3 に答える 3

107

setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);メソッドのドキュメントには、事前に計算された絶対ピクセル値であると私が理解しているgetDimensiona を返すと記載されているため、使用する必要があります。Resource dimension value multiplied by the appropriate metric.

つまり、次を使用します。

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_size_small));
于 2011-08-13T18:03:55.977 に答える
25

どういうわけかこれは合うようです:

XML:

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

Java:

setTextSize(TypedValue.COMPLEX_UNIT_SP, 9);
setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.typo14));
于 2012-02-20T14:12:16.860 に答える
2

その問題sp px dpi

tv.setTextSize(14) = 14 pixels 
于 2011-07-22T00:18:19.373 に答える