px、dp、spなどのサイズ指定単位の違いとは? | Androidアプリ開発

※当サイトはアフィリエイト広告を利用しています。

Androidアプリ開発においてViewの大きさなどを指定するときにpx、dp、spなどの単位が出てきて、これはなんだ?と思った方もいるでしょう。

例えば、Nexus 4のエミュレーター(4.7インチ画面、768 x 1280 px)でそれぞれの単位を指定すると以下のようになります。(文字サイズは大にしています)
Nexus 4のエミュレーター(4.7インチ画面、768 x 1280 px) での例
Nexus 4のエミュレーター(4.7インチ画面、768 x 1280 px) での例
係数は同じでもそれぞれの単位の違いで実際の大きさが異なっているのが分かりますね。

この記事ではそれらの単位の違いについて紹介します。
スポンサーリンク


単位には相対的と物理的なものがある!

サイズ指定に使用できる単位には①相対的単位と②物理的単位の2つがあります。
例えば、dp,、spは相対的単位であり、pxは物理的単位です。

以下に単位のまとめを示します。
単位説明
相対的単位dp密度非依存ピクセル(Density-independent Pixels)。
160 dpi(※)の画面において1 dp = 1 pxとなり、
デバイスのdpiに対して相対的に変化する。
(※dpiは1平方インチあたりのドット数密度)
spスケール非依存ピクセル(Scale-independent Pixels)。
デバイスのフォントサイズ設定によって相対的に変化する。
物理的単位pxピクセル数
inインチ
mmミリメートル
ptポイント(1/72インチ)
ざっくり言うと、dpやspは想定的な単位なので実際のデバイスの大きさを考慮する必要がない便利な単位であり、pxなどの物理的な単位は現実の長さの単位なので実際のデバイスの大きさに左右されることになります。

結局pxとdpって何が違うの?

pxとdpって結局どう違うのか?を例を交えて説明します。

dpは160 dpiのデバイスでは1 dp = 1 pxと同じサイズになります。
よって、160 dpiのデバイス同士では以下のように200 dpの正方形と200 pxの正方形は同サイズになります。
pxとdpの違いの例
160dpiデバイスでは200px=200dp
しかし、実際のAndroidデバイスは様々なメーカから様々デバイスが発売されており、それぞれでdpiが異なります。

もし、右側のデバイスが320 dpiのドット数密度だった場合はさきほどの例はどうなるでしょうか?
答えは以下のようになります。
pxとdpの違いの例
dpiが160以外だとpxとdpは不一致になる
右側のデバイスは左側に比べてドット数密度が高いということは、1 pxあたりのサイズが半分になっていることです。

よって200 pxのサイズも半分になってしまい、ここままではデバイスによって同じサイズのUIにすることができません

そこで活躍するのがdpの相対的単位です。dpはこのdpiの違いを考慮して自動的に同じサイズにしてくれます。

さきほどの160 dpiと320 dpiデバイスのそれぞれで200 dpを表示した場合を以下に示します。
pxとdpの違い
dp指定すればdpiが異なるデバイスでも同じサイズになる
よって、UIをデザインする際にViewの大きさを指定する場合はdpを使用し、ユーザのデバイスのdpiサイズに依存しないデザインを目指しましょう。

spは?

spはdpに似ていますが、こちらはデバイスのフォントサイズ設定に依存して相対的にサイズを変えます。

よって、spはTextViewなどでフォントサイズを指定するときに使用すると良いでしょう。

px⇔dp⇔spの変換方法

コード内における動的なpx⇔dp⇔spの変換方法については以下の記事にまとめています。

まとめ

この記事ではAndroidアプリ開発におけるpx、dp、spなどのサイズ指定違いについて例を交えて紹介しました。

dpやspをうまく使用することで、異なるデバイスでも同じようにUIを表示するようにデザインすることができます。