画面の解像度やdensity(ピクセル密度)の取得方法
Androidは、マルチスクリーンに対応しています。
これはどういう事かというと、解像度の異なる端末でも、同じように表示させる事ができる仕組みです。
ピクセル指定で画像を作成したり、プログラム上でレイアウトを制御すると、
高解像度の端末では、横幅が足りなかったり、ボタンが小さくて押せない、といった現象が起きます。
その為、解像度の異なる端末でも、一つのバイナリで対応させるには、それらを考慮した
実装が必要になります。
その解決法のいくつかをご紹介します。
1.layout.xmlにて、dip指定でサイズを指定
dipというのは、device-independent pixelの略で、直訳しますと
端末に依存しないピクセル
となります。
これはどういう単位か、というと、160 dpiの1ピクセルの物理的な大きさを1dipと定義しています。
つまり、320dpiのスクリーンを持つ端末では、1dip=2pixelという計算になります。
layout.xmにて、サイズを全てdip指定にするだけで、特に難しい事を考えることなく
マルチスクリーンに対応させる事ができます。
2.プログラムでscaleを取得
しかし、全てのレイアウトをxmlで記述するワケにもいかないのが、人情というものです。
プログラムで動的に変えなきゃいけないんだよ…という事もあると思います。
残念ながら、APIレベルでは、dipには対応していません。LayoutParamsのコンストラクタに
LayoutParams(100dip ,100dip)なんて書いてみても、コンパイルエラーが起きるだけです。
では、どうするかというと、現在のピクセルから何倍すれば1dipになるか、という計算をしてあげます。
そこらへんの情報を、以下のように取得できます。
ここで、metrics.scaledDensityという値があります。これが、現在の1ピクセルに対する1dipの倍率になります。
つまり、1ピクセル×scaledDensity=1dipとなります。
プログラムで横幅を指定したい場合は、上記を使うと良いでしょう。
詳しくは、公式サイトをどうぞ。
http://developer.android.com/intl/ja/guide/practices/screens_support.html


