公式ドキュメント はこれに答えていないようです、または私はそれを理解できません。
要素(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
リソースを使用して、フォントサイズがコードよりも小さいのはなぜですか?
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));
_
どういうわけか、これは収まるようです:
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));
sp
px
dpi
の問題
tv.setTextSize(14) = 14 pixels