2012年10月4日

【Android】今さら聞けない、px、sp、dip、dpの違い


Androidでサイズ指定する際に混同するのが、SPとDP。
これらにはどんな違いがあるのか、XMLやデザインをする上でのテクニックを紹介します。


px

Pixelsの略です。
実際の画面上のPixelがそのままの単位になります。
たとえば、480px X 800pxの画面であれば、
1pxは画面の1/480という事になります。

dp(dip)

Density-independent Pixels(密度に非依存のピクセル)の略です。
dp=dipですので、書く文字の少ないdpを私は使います。
ディスプレイ解像度の物理的な密度に応じた抽象単位になります。
160dpi(dots per inch)を基準にした単位で、1dpは160dpiの画面で1pixelになります。
dpとpixelの比率は画面密度(dpi)によって変化しますが、必ずしも正比例ではありません。

sp

Scale-independent Pixels(スケールに非依存のピクセル)の略です。
dpの単位と似ていますが、画面上のサイズはユーザのフォントサイズ設定に準じます。

pt

Pointsの略で、よく文字サイズに使われます。
Wordだと11.5とか12ptが主流ですかね。
1インチの1/72を基準とした画面の物理サイズです。

結局は…

実際にコーディングする時は画面サイズを480px X 800pxでだいたい考えて、
XMLやプログラミングのコーディングが終わったら、720px X 1200pxの実機でも検証します。
幅、高さ、マージン、パディングはdpで指定し、
文字サイズに関してだけspで指定します。
文字サイズはだいたい15sp前後を利用しますが、
大きめの文字でも20spぐらいまでで、小さくても12spぐらいで
それ以上小さくも大きくもしないようにしています。

Android Developersのデザインパターンも参考にすると良いのですが、
Android4.0以降のデザインパターンとして
高さ48dp、マージン4dpのデザインを推奨しています。
詳しくはこちら:Android Developers | Metrics and Grids

デザインの参考になればと思います。

後日補足

ちなみに、pixelとdpの変換コードの記事書きました。
【Android】dp↔px変換コード