ドキュメントはこちら
http://developer.android.com/intl/ja/guide/topics/resources/more-resources.html#Dimension
dp (dip)
Density-independent Pixels
画面の物理的な密度に基づいた抽象的な単位。
この単位は 160 dpi の画面と対応していて、160 dpi の画面で 1 dp = 1 px になる。なので、dp-pixel 比は画面密度(解像度)に応じて変化するが、必ずしも正比例するわけではない。コンパイラは "dip"、"dp" のいずれも理解できるが、"dp" という記述のほうが "sp" との対応関係がよりわかりやすい。
sp
Scale-independent Pixels
dp に似た単位だが、ユーザーが設定したフォントサイズによって自動でスケールされる。フォントサイズを指定する場合には、この単位を使うことを推奨している。よって、sp で指定したサイズは、画面密度(解像度)とユーザーが設定したフォントサイズに依存する。
pt
Points
スクリーンの物理的サイズに基づいた 1/72 インチ。
px
Pixels
ピクセル、画面の実際のピクセル数
デバイスによって、1インチ当たり異なるピクセル数を持つ可能性があり、実際に表示されるサイズが変わってくるため、この単位で測ることは推奨しない。
mm
Millimeters
ミリメートル、画面の物理的サイズに基づく。
in
Inches
インチ、画面の物理的サイズに基づく。
単位自体を res で定義することもできます
xmlファイル の場所
res/values/filename.xml
ファイル名は任意 (dimens.xml とか)
構文:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen
name="dimension_name">dimension</dimen>
</resources>
name 属性が resource ID になります。
Java からアクセス: R.dimen.dimension_name
XML からアクセス: @[package:]dimen/dimension_name
要素:
<resources>
必須、root node でないといけない、属性なし
<dimen>
float で表現、数字の後に単位(dp, sp, pt, px, mm, in)
属性
name
文字列、resource ID になる
例)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 側で、この dimension にアクセスするには
Resources res = getResources();
float fontSize = res.getDimension(R.dimen.font_size);
getDimension(int)
DisplayMetrics に応じて単位変換してくれる
戻り値は float
戻り値として int で返してほしい場合(例えば、setPadding に使うとか)は
getDimensionPixelSize(int)
戻り値が int なだけで、getDimension(int) と同じ
integer pixels に変換してくれる。
getDimensionPixelOffset(int)
というのもある
戻り値は int
raw pixels で使うための offset が返ってくる?らしい
XML 側でアクセスするには
<TextView
android:layout_height="@dimen/textview_height"
android:layout_width="@dimen/textview_width"
android:textSize="@dimen/sixteen_sp"/>
いつも参考にさせてもらっています。
返信削除非常に助かってます。ありがとうございます。