Dimens.xmlに変数があります
<resources>
<dimen name="btn_text_size">12sp</dimen>
</resources>
そして、私はそれをレイアウトファイルで使うことができます:
<TextView
Android:textSize="@dimen/btn_text_size"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/dialog_tags_complete"
/>
またはプログラムで
tagButton.setTextSize(c.getResources().getDimension(R.dimen.tag_text_size));
しかし、この2つの方法では異なる結果が得られます。 getDimension
は、リソースに関連付けられている現在のDisplayMetricsに基づいていることを知っています。
しかし、この2つの方法を同じにするにはどうすればよいですか?
setTextSize( float )
には、スケーリングされたピクセル値が必要です。したがって、setTextSize( 12 )
を使用すると、目的の結果が得られます。ただし、getDimension()
およびgetDimensionPixelSize()
はピクセル単位でサイズを返すため、setTextSize()
のユニット型バリアントを次のように使用する必要があります。
setTextSize( TypedValue.COMPLEX_UNIT_PX, getDimensionPixelSize( R.dimen.tag_text_size ) );
tagButton.setTextSize(c.getResources().getDimensionPixelSize(R.dimen.tag_text_size));
これは問題なく機能します:)また、textViewにはsetTextSize(int unit、float size)があることも覚えておいてください。
私は現在同じことをしています。 dimens.xmlでディメンションを設定し、それをプログラムで適用しました。これは、xmlで設定する場合の3倍です。
私もチェックしました:
TextView.getTextSize() = 92f
getResources().getDimension(R.dimen ...) = 92f
TextView.setTextSize(92)!= XMLからのサイズのTextView、TypedValue.COMPLEX_UNIT_PXなどの他のフラグはさらに大きくします。
デフォルトのsetTextSizeは、デフォルトでCOMPLEX_UNIT_SPを適用します。もう一度言いますが、Android APIは一貫性がないため、プログラムでのみ設定し、サイズを適合させることで、それらが収まるようにすることが私の解決策となります。
編集:プログラムでテキストサイズをGalaxy Note 2(4.4.2)とNote 4(5.0.1)で設定すると、まったく異なる結果になります-.-