解像度とかピクセル密度にうんざり

By | 2012年2月12日

Flash畑にいた自分がAndroidのJava畑に移ろうとしたときにまずハマったのがレイアウト(画面の作り方)。
RelativeLayoutと出会って何となく解決して、次にハマったのが先に書いた解像度とかピクセル密度。
最近、自分の中でやっと解消したので忘れないようにメモとして残しておきます。

●言葉の意味が理解できなかった

Flashやってて、普段使う解像度とはモニタの縦横のピクセル数のことだったので、android開発の本やサイトで「ピクセル指定は良くない。解像度で見え方が違う。様々なデバイスでほぼ同様の見え方にするためにdpやspを使いましょう。」と言われても意味が分かりませんでした。

分かりやすく説明している人もたくさんいて(自分は理解できませんでしたが、きっと分かりやすいんだろうと予想)、「640px X 320pxの画面と800px X 480pxの画面だと100px X 100pxの正方形を描画した場合に画面に対する比率が違ってしまいます。」等と図入りで説明されても「そりゃそうだ」位にか思えず、その内容とピクセル密度や、dp→pxの変換がどう関連しているのかが分かりませんでした。

●なぜ同じ大きさである必要があるか、が抜けていた

「タブレットの様な7インチや10インチの画面でギリギリ押せる大きさのボタンやギリギリ読めるテキストを表示した時、5インチの画面で快適に見れないよね。」
という内容の一文を見てやっと、解像度やピクセル密度の話はUIの表示に関わる内容であることが理解できました。ただ同じ大きさ・配置に表示することが目的だと思っていたので、こんな当たり前の一文を見るまですっかり忘れていました。

この一文を見た上で「端末毎の違いを吸収してくれるのがdpやspなのでこちらを使いましょう」という流れであれば自分でもすんなり理解できなと思われます。

●なぜ忘れていた?

リキッドレイアウトのFlashを作る場合、以下の事が当たり前のように必要になります。
・画面の左上にロゴを置く、フッタは下付き、メイン画像は右付きだけど横幅が1000px超えたらそこで固定、等の配置に関する指定。
・ロゴやコピーライトを画面サイズに対して常に同じ比率で表示する場合や背景画像を歪みなく画面全体に表示する、等の大きさに関する指定。

また、ブラウザの大きさは環境によって様々ですから、Flashを使わないウェブページでも横幅○○px以内に要素を収める必要があったり、高さに関しても、主流ブラウザの全てでファーストビューに○○までを収める事が求められるため、これらの事を想定してデザインなりコーディングをする事が当たり前だと思っていました。
その部分を(ある程度は)考えなくていい、とはとても思いつきませんでした。10インチで見えるけど、5インチで見れないかもしれない画面を作ろうとは元々考えませんでしたし、、、

dp・spが無かったとして、「様々な画面に対応するためには画面サイズとピクセル密度を用いた計算が必要になります」とあっても、そういう物なんだろう、と覚えていたと思います。

●こんな順番だったらすんなり理解できたと思う

1、Androidには様々な画面サイズがあります。
2、大きな画面のみを想定して作ると、小さい画面で見る時に不都合が出る可能性があります。
3、解像度やピクセル密度を考えながら色々な画面を想定して作るのは大変そうですね。
4、それらを深く意識しなくてもいいのが「dp」「sp」です。
5、px指定ではなくdpやspを使いましょう。

●おわり

間違いや認識にズレがある場合はご指摘いただけると大変助かります。
これより大きくハマっているのがアニメーションの実現で、本当に簡単な動きも再現できずに時間ばかりが過ぎています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です