マルチ画面のサポート

マルチ画面のサポートなんてpxではなくdpを使用していれば全てOK!

・・・かと思いきや、世の中そんなに甘くはないらしい。

詳しくは下記ページに記載があるが、

なんだか頭がこんがらがるので少しまとめてみようと思います。

http://developer.android.com/intl/ja/guide/practices/screens_support.html

まず、pxを用いていた場合にどうなるか。

5インチで 320x480 の解像度(密度:160dpi) 5インチで 480x800 の解像度(密度:240dpi)

※24pxの文字列、縦横100pxの画像 ※24pxの文字列、縦横100pxの画像

解像度が高くなると、小さく表示されることがわかります。

次に、dpを用いた場合にどうなるか。

5インチで 320x480 の解像度(密度:160dpi) 5インチで 480x800 の解像度(密度:240dpi)

※24dpの文字列、縦横100dpの画像 ※24dpの文字列、縦横100dpの画像

ほぼ同じ大きさで表示されることがわかります。

これはなぜかというと、dpi(密度)が関係していて、

(密度:160dpi)の大きさを「1」とした場合、

(密度:240dpi)の大きさが「1.5」となるよう自動的に調整してくれるためです。

それでは問題となる場合は、なんぞや。

それは同じ解像度だけど、画面サイズが異なる場合です。

5インチで 800x1280 の解像度(密度:320dpi) ※24dpの文字列、縦横100dpの画像

10インチで 800x1280 の解像度(密度:160dpi)※24dpの文字列、縦横100dpの画像

の場合。

この場合、5インチでは密度が320dpiあるため通常の2倍のサイズで表示されるが、

10インチでは密度が160dpiのため通常のサイズで表示され、画面が崩れてしまうわけです。

要は下記ページに記載されている表の列(密度)に対する対応はdpで可能だが、

表の行(画面サイズ)に対する対応はdpでは出来ない。ということになります。

http://developer.android.com/intl/ja/guide/practices/screens_support.html#testing

ではその対応はどうするか。

それは画面サイズによるリソースファイルを分ける。

ということです。

layout-small

layout-normal

layout-large

layout-xlarge

で分けられるので、それぞれの画面サイズに対応したリソースを用意してください。

リソースファイルについて

http://developer.android.com/intl/ja/guide/topics/resources/providing-resources.html

結構面倒くさいですな~。。