dimens.xmlを使ってテキストサイズ指定 – Android

数値指定はXMLからでもJavaからでも共通化したいよね!って話で。

結構勘違いしまくってたのでめもめも。

まずは res/values/dimens.xml に数値を指定

<?xml version="1.0" encoding="utf-8"?> 
<resources>
    <dimen name="text_size">14sp</dimen>
</resources>

テキストサイズを指定するときは「sp」を使います。
どんな解像度の端末でも大丈夫だとかなんとか、

画像やレイアウトのサイズは「dp」とか「dip」。

これをレイアウトのXMLで使用する場合はこちら

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <!-- dimens.xmlからひっぱって指定 -->
    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="@dimen/text_size" />

    <!-- 数値で指定 -->
    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp" />

</LinearLayout>

一応、数値で指定する場合も追加。
どっちも同じ結果になるはず。

最後にJavaから指定する方法

TextView tv = new TextView(this);

// dimens.xmlからひっぱって指定
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_size));

// 数値で指定
tv.titleTV.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);

ちょっとややこしいけど、下の方は数値をSPにして表示。
上のdimensな方はpxに変換。
よくわかってないけど、これでうまくいくっぽいで!

参考
http://stackoverflow.com/questions/9494037/how-to-set-text-size-of-textview-dynamically-for-diffrent-screens