web-dev-qa-db-ja.com

.xmlまたはプログラムでテキストサイズを設定する

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 ) );
36
323go
tagButton.setTextSize(c.getResources().getDimensionPixelSize(R.dimen.tag_text_size));

これは問題なく機能します:)また、textViewにはsetTextSize(int unit、float size)があることも覚えておいてください。

3
Mark

私は現在同じことをしています。 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)で設定すると、まったく異なる結果になります-.-

0
Jan Ni