回答:
density = getResources().getDisplayMetrics().density;
// return 0.75 if it's LDPI
// return 1.0 if it's MDPI
// return 1.5 if it's HDPI
// return 2.0 if it's XHDPI
// return 3.0 if it's XXHDPI
// return 4.0 if it's XXXHDPI
画面密度は次の方法で確認できます。
switch (getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
// ...
break;
case DisplayMetrics.DENSITY_MEDIUM:
// ...
break;
case DisplayMetrics.DENSITY_HIGH:
// ...
break;
case DisplayMetrics.DENSITY_XHIGH:
// ...
break;
}
編集 Androidの進化に伴い、他の値switch
もケースに含める必要があることに注意してください。この編集の時点で、これにはDisplayMetrics.DENSITY_TV
およびが含まれDisplayMetrics.DENSITY_XXHIGH
ます。相談するドキュメントの最新情報については、わざわざこの答えを維持するつもりはありません。
density
SteDの提案に従って使用できます。)
DENSITY_XXHIGH
。今後のすべてのケースをカバーするために、回答に免責事項を追加しました。:)
2018年現在、以下の方法を使用できます-
public static String getDeviceDensityString(Context context) {
switch (context.getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
return "ldpi";
case DisplayMetrics.DENSITY_MEDIUM:
return "mdpi";
case DisplayMetrics.DENSITY_TV:
case DisplayMetrics.DENSITY_HIGH:
return "hdpi";
case DisplayMetrics.DENSITY_260:
case DisplayMetrics.DENSITY_280:
case DisplayMetrics.DENSITY_300:
case DisplayMetrics.DENSITY_XHIGH:
return "xhdpi";
case DisplayMetrics.DENSITY_340:
case DisplayMetrics.DENSITY_360:
case DisplayMetrics.DENSITY_400:
case DisplayMetrics.DENSITY_420:
case DisplayMetrics.DENSITY_440:
case DisplayMetrics.DENSITY_XXHIGH:
return "xxhdpi";
case DisplayMetrics.DENSITY_560:
case DisplayMetrics.DENSITY_XXXHIGH:
return "xxxhdpi";
}
}
しかし、@ Tedが指摘したように、使用する前に常に公式ドキュメントを参照してください
上記の回答から、私はそれらを組み合わせて、以下の関数を作成しました:
public static String getDeviceDensity(Context context){
String deviceDensity = "";
switch (context.getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
deviceDensity = 0.75 + " ldpi";
break;
case DisplayMetrics.DENSITY_MEDIUM:
deviceDensity = 1.0 + " mdpi";
break;
case DisplayMetrics.DENSITY_HIGH:
deviceDensity = 1.5 + " hdpi";
break;
case DisplayMetrics.DENSITY_XHIGH:
deviceDensity = 2.0 + " xhdpi";
break;
case DisplayMetrics.DENSITY_XXHIGH:
deviceDensity = 3.0 + " xxhdpi";
break;
case DisplayMetrics.DENSITY_XXXHIGH:
deviceDensity = 4.0 + " xxxhdpi";
break;
default:
deviceDensity = "Not found";
}
return deviceDensity;
}
次に、密度情報を取得するデバイスと使用するフォルダーで、そのアクティビティに上記のメソッドを追加し、onCreateに以下の行を追加します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Log.d("Screen Density: ", Helper.getDeviceDensity(this));
}
React Nativeが現在デバイスのサイズを確認するため
import { PixelRatio } from 'react-native';
switch(PixelRatio.get()) {
case 1:
return "mdpi";
case 1.5:
return "hdpi";
case 2:
return "xhdpi";
case 3:
return "xxhdpi";
case 3.5:
return "xxxhdpi";
}
PixelRatio.get()
Android設定で設定された表示サイズとdpiに応じて、値の範囲を返します。これらの値は、チョークアウトした正確な値と一致しません。
一部のデバイス(私はGalaxy Tab3です)では、densityとdensityDpiの両方が1.33(density)、213(densityDpi)のような奇妙な値を返します。だから私の解決策はこれらのフラグを追加することです:
<item type = "bool" name = "is_mdpi"> [bool] </ item>
<item type = "bool" name = "is_hdpi"> [bool] </ item>
<item type = "bool" name = " is_xhdpi "> [bool] </ item>
<item type =" bool "name =" is_xxhdpi "> [bool] </ item>
4つのvalues.xmlファイルに、対応するres / values- [xxx] /フォルダーの下に配置します。