月別アーカイブ: 2013年12月

androidの機種毎のディスプレイサイズの扱いについて

皆さんこんばんわ☆メリークリスマス
今年も残すところあとわずかですね。

本日はandroidのディスプレイの画面情報についてのまとめを投稿します。
バラエティに富みつつややこしい android機種毎のディスプレイサイズに対してどう切り分けるのかの参考までに

以下のサンプルコードで DisplayMetrics クラスでディスプレイ情報は取得できます

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

では、手っ取り早くDisplayMetricsクラスで取得できるディスプレイ情報を再確認しましょう
Dpi の定数は DENSITY_LOW から DENSITY_XXHIGH までの Dpi の他、何処で使うのかわかりませんが DENSITY_TV なんて定数もありますね、既定はご存じ DENSITY_MEDIUM (160) になっています。
         
public class DisplayMetrics{
public static final int DENSITY_LOW = 120;
public static final int DENSITY_MEDIUM = 160;
public static final int DENSITY_TV = 213;
public static final int DENSITY_HIGH = 240;
public static final int DENSITY_XHIGH = 320;
public static final int DENSITY_XXHIGH = 480;
public static final int DENSITY_DEFAULT = 160;
public int widthPixels;
public int heightPixels;
public float density;
public int densityDpi;
public float scaledDensity;
public float xdpi;
public float ydpi;
public DisplayMetrics(){ throw new RuntimeException(“Stub!”); }
public void setTo(DisplayMetrics o) { throw new RuntimeException(“Stub!”); }
public void setToDefaults() { throw new RuntimeException(“Stub!”); }
public String toString() { throw new RuntimeException(“Stub!”); }
}
    
基本的に DisplayMetrics の densityDpi を使って機種毎の画面密度の数値であるこの Dpi を取得します。
density やら Dpi やらと出てきましたが、結局は以下の関係になります。

画面のピクセル = density(画面の密度) × densityDpi(画面のドット)

画像の場合は res 配下の drawable-hdpi 等に配置すれば、その機種の画面サイズ毎に出し分け出来ますが、アプリ内で画像やレイアウトを動的にしたい場合にいづれ必要になるかと思います。また、例えば縦のサイズが微妙に違う機種でのレイアウト変更にも使用できます。

参考になれば幸いです、しょうたんでした。