Androidで開発をやっていると、画面の解像度やDensityを判定したくなるときがある。

画面の解像度やdensity(ピクセル密度)の取得方法 – Android Techfirm Lab」を参考にしたのだが、どうも求めている物と違う。

xdpi、hdpi, mdpi, ldpiを判定したいのだ。

いろいろと調べた結果、以下のソースコードに落ち着いた。どうも、xdpiは返ってこないよう。。

[java]

DisplayMetrics metrics = new DisplayMetrics();

activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

if (metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) {

// xdpi

} else if (metrics.densityDpi == DisplayMetrics.DENSITY_HIGH) {

// hdpi

} else if (metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM) {

// mdpi

} else if (metrics.densityDpi == DisplayMetrics.DENSITY_LOW) {

// ldpi

}

[/java]

これは、前に作ったアプリで、解像度ごとにアイコンサイズを変更する必要があったので調査した内容。

しかし、タブレットだけアイコンサイズが違う。タブレットはmdpiらしいが、アイコンサイズは72×72(hdpi)が使われている。ということで、タブレットの判定も必要になった。

タブレット判定は、以下のコードでできる。Google IOのアプリ内にあるソース。

[java]

public static boolean isHoneycomb() {

return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;

}

public static boolean isHoneycombTablet(Context context) {

return isHoneycomb() && (context.getResources().getConfiguration().screenLayout

& Configuration.SCREENLAYOUT_SIZE_MASK)

== Configuration.SCREENLAYOUT_SIZE_XLARGE;

}

[/java]

参考

Supporting Multiple Screens