マルチ画面のサポート
マルチ画面のサポートなんて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
結構面倒くさいですな~。。