dpとspについて
はじめに
意識して使い分けている自信はあったけど説明しろと言われると割と困ったので調べました。
参考
- Y.A.M の 雑記帳: Android Dimension 単位
- 公式ドキュメントの翻訳、ここを見れば全部わかりますが自分がよく使う部分だけ抜き出して見ました。
各単位
- dp
- 画面密度(解像度)に応じて変化する抽象的な単位
- 必ずしも正比例するわけではない
- "dip"、"dp"どちらでもOK
- sp
- dpと同じく画面密度に応じて変化する
- ユーザが設定したフォントサイズも反映される。よってフォントサイズ指定にはこの単位を使用するべき
- しかし私はデバイスで文字サイズ設定するやり方がわからない
単位をresで指定する場合
例)res/values/dimens.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="textview_height">25dp</dimen> <dimen name="textview_width">150dp</dimen> <dimen name="ball_radius">30dp</dimen> <dimen name="font_size">16sp</dimen> </resources>
javaからのアクセス
Resources res = getResources(); // floatで欲しい場合 float fontSize = res.getDimension(R.dimen.font_size); // intで欲しい場合 int fontSize = res.getDimensionPixelSize(R.dimen.font_size);
xmlからのアクセス
<TextView android:layout_height="@dimen/textview_height" android:layout_width="@dimen/textview_width" android:textSize="@dimen/sixteen_sp" />