web-dev-qa-db-ja.com

コードおよびリソースでTextViewフォントサイズを設定する際の不整合

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

要素(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リソースを使用して、フォントサイズがコードよりも小さいのはなぜですか?

62
davidcesarino

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

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

_tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_size_small));
_
102
maxmc

どういうわけか、これは収まるようです:

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));
24
DaRolla

sppxdpiの問題

tv.setTextSize(14) = 14 pixels 
2