tande lab.

[Android] Android特有の単位 “dp” と “sp”

dpなんて単位は初耳だぞ、なんぞこれ。

てことで調べてみたら、
Android では px (ピクセル)とは別に
画面解像度(画面密度)に応じて変化する抽象的な独自単位をもっていて
それが dp や sp ていう単位なんだそうです。

160dpi の画面で 1dp = 1px になるよう設計されているので
240dpi の画面であれば 1dp = 1.5px
320dpi の画面であれば 1dp = 2px
で描画されるようになるのですね。

正確にいうと、px には小数点はないので、
1.5px は描けないけど、1.5px 相当の 1dp であれば描画できるということ。

https://lh3.googleusercontent.com/-6tITN9fGrzU/T0-HjfBi83I/AAAAAAAA42w/7VoJ8QmXE-g/s800/1dp.png
※ 上の画像は概念図なので、色々矛盾しているけどご容赦をw

解像度違いの端末がたくさんあるAndroidならではの柔軟な単位ですねー。感心。
ということで、Androidでは絶対指定になる px の利用は推奨されていないようです。

ただし単純比例で拡大縮小をするわけじゃないらしいので、そのへんは要注意らしい。

ちなみにフォントは似たような概念の sp で指定すると良いとあるので、
画像やレイアウトは dp で、フォントは sp でって覚えておけば良いようです。

参考サイト

以下サイトの説明が分かりやすかったです。