dpとは?
記事のタイトルどおりのことだけど、アプリを作る上で、出来るだけ多くの端末に対応したいって考えると思います。
それを実現するためにあるのは知ってたけど、いまいちわかってなかった「dp」という単位について、簡単にまとめてみます!
まずは「px」について。
1.px = スクリーン上でのドット
px指定だと解像度が変更されたときに、表示が変わってしまうので、これは使用できない。Androidリファレンスなどでも推奨されていません。
たとえば、1280x800の端末向けに作ったアプリを「px」指定で作成して、800x480の端末にインストールしても、レイアウトが収まりません。
あたりまえですね(´・ω・`)
2.dp = 密度非依存ピクセル
Android独自の?単位らしいですが、仮想的なピクセル単位を表します。画面の密度に依存せずにサイズを指定できます。
※密度とは?
端末の画面には、解像度以外に密度というのがあります。キャリアの端末スペックなどを見れば書いてあることがありますが、それ以外では密度を調べるアプリなどがあるようなのでそれで確認できます。
密度は、端末によって違いますが、密度が160密度なら「1dp=1px」ということになります。Galaxy nexusの密度は320なので「1dp=2px」ということになります。
なのでdpを指定してあげるとアプリを起動したときに自動的にサイズを計算してくれるので、密度が変わっても表示サイズは変わりません。
ですがここで注意したいのはあくまで密度だけが変わったらの場合です。
dp指定で作ったレイアウトは、解像度が変わらず、密度が変わった場合には有効と言えます。
なのでまとめとしては、
px = 解像度が、同じ端末に対応したい場合。
dp = 解像度が同じかつ、画面密度が変わっても同じように表示したい場合。
ということになるでしょう。
なので全ての端末に対応するためには「dp」だけではなく、方法としては、
weightを指定する、レイアウトを密度によってレイアウトのフォルダを分ける、など色々方法があると思います。解像度や密度によってフォルダを分けるのは確実でよいですが、どんどん新しい端末がでてくるし、解像度も密度も違うので、そのたびに対応する必要があります・・・。
本当に今出ている端末すべてに対応する!って考えるとすごい手間がかかるし、工数もそれだけ増えるし、大変ですよね(´-ω-`)
結構調べてみても簡単に対応するってことは、できなそうダナーって感じでした。