備忘録 〜プログラミング〜

プログラミングに関する事をつらつらと、、

setTextSizeにgetDimensionの値を入れても意図したサイズになってくれない問題

コード上でテキストのサイズを指定する必要が出てきたので、このようにテキストサイズを指定してみました。

mTitle.setTextSize(getResource().getDimention(R.dimen.text_size_midium));

ちなみに、R.dimen.text_size_midiumは、dimens.xmlファイル内にこのように設定しています。

<dimen name="text_size_medium">18sp</dimen>

setTextで設定される値は、こちらの記事( http://y-anz-m.blogspot.jp/2012/02/androidtextview-settextsize-sp.html )によるとspとの事なので正常な値になるかなと思ったのですが、いざ実行してみると、何故か意図したサイズよりも大きい、、
getDimentionではなく、getDimensionPixelSizeを使用してみたのですが同じ。
そもそも、getDimentionもgetDimensionPixelSizeも返ってくる値は同じで、戻り値がfloatかintかの違いがあるのみのようでした。
では、どうするかというのが、こちら

mTitle.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResource().getDimention(R.dimen.text_size_midium));

TypedValue.COMPLEX_UNIT_PXを指定してデフォルト値をPXに変更しています。
SPで設定した文字は、ユーザーのフォントサイズによって変化してしまうので、狙った画面レイアウトが出来ないようですね。
こちらのサイト( https://akira-watson.com/android/dp_sp.html )が分かりやすかったです。
SPで指定するのは推奨されていないようですが、一旦この方法で解決しましたー
px、dp、sp、、色々と単位があってややこしいですな

【参考】stackoverflow.com