mdpi デバイスでは、次のメソッドを呼び出したいと思います。
final float scale = getResources().getDisplayMetrics().density;
double height_px = 45 * scale + 0.5;
アプリが hdpi デバイスで実行されているときにメソッドを無視したいのですが、クラスの画面サイズをどのように判断できますか?
mdpi デバイスでは、次のメソッドを呼び出したいと思います。
final float scale = getResources().getDisplayMetrics().density;
double height_px = 45 * scale + 0.5;
アプリが hdpi デバイスで実行されているときにメソッドを無視したいのですが、クラスの画面サイズをどのように判断できますか?
ええ、単純にこのようにスケール値を確認できます。
final float scale = getResources().getDisplayMetrics().density;
これで、スケール値が得られました。スケール値は次のように変化します。
MDPIデバイスの場合、スケール値は1.0です。
LDPIデバイスの場合、スケール値は0.75 です。
HDPIデバイスの場合、スケール値は1.50です。
XHDPIデバイスの場合、スケール値は2.0です。
クロスチェックをするだけで、
if(scale <1.50)
{
double height_px = 45 * scale + 0.5;
}
つまり、このコードは高解像度以上では実行されません。
次のように sth を実行することもできます。
int dpiDensity = getResources().getDisplayMetrics().densityDpi;
そして、次のように、結果の値を DisplayMetrics の定数と比較できます。
switch(dpiDensity){
case DisplayMetrics.DENSITY_LOW:
//Do sth for LDPI-screen devices
break;
case DisplayMetrics.DENSITY_MEDIUM:
//Do sth for MDPI-screen devices
break;
case DisplayMetrics.DENSITY_HIGH:
//Do sth for HDPI-screen devices
break;
case DisplayMetrics.DENSITY_XHIGH:
//Do sth for XHDPI-screen devices
break;
}
DENSITY_DEFAULT という定数もありますが、その値は DENSITY_MEDIUM と同じです。