Androidのレイアウトで苦労しない為に – 重要なのはdpiとdp

レイアウトについて知識不足だった為、困ったことがありました。
Android2.3でのお話です。

最近、解像度が960*540のいわゆるHD端末がありますよね。
アスペクト比は現在主流の854*480とほぼ同じです。
どちらもhdpiです。

この2種類の端末で同じように表示されるレイアウトを作る必要がありました。
アスペクト比が同じですので一つのレイアウトでいけるじゃん!
と思いながらレイアウトエディタでAndroidの推奨する単位であるdpでレイアウトしました。
レイアウトした時のプレビュー画面は854*480の設定です。

完成したので表示すると…960*540でちょっと小さい!

dpを理解していれば当たり前でしょ、と言われるところです。

dpiが同じ場合、実際に表示されるピクセル数は同じです。
例えば10dpをhdpiで表示する時は10 * 1.5 = 15pxとなります。
なので、960*540・854*480どちらの端末でも15pxで表示されちゃうんです。

dpで吸収できないこの問題。
どうやって対応します?
レイアウトを2つ作る・dpを指定しているもの全てを表示前に拡大縮小処理(値の調整)する、のどちらかだと思います。

前者は対象が限定されていれば問題ないですが、どんな端末でも対応とはいきません。
また、レイアウトを出し分ける仕組みもうまく働かない為、自前でsetContentViewへ与えるレイアウトIDを出し分ける処理を書く必要があります。

後者はどんな端末でも対応できるとは思いますが、専用の処理を書く必要があります。
(専用の処理は結構めんどくさそう&重そう…)

前者の方法で今回は対応したのですが、Android環境はカオスすぎますね…
dpとはなんだったのでしょう。
どんな端末でも同じ大きさで表示してくれる単位だと思ってましたよ、googleさん…

Leave a Reply