如何检查Android设备是HDPI屏幕还是MDPI屏幕?

我想检查这个通过互联网获取不同的图像。 怎么做?

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_TVDisplayMetrics.DENSITY_XXHIGH 。 请参阅文档了解最新信息; 我不打算保持这个答案。

在某些设备上(我的是Galaxy Tab3),密度和密度Dpi都会返回奇怪的值,如1.33(密度),213(密度Dpi)。 所以我的解决scheme是添加这些标志:

<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] /文件夹下。

从上面的答案,我结合他们,并创build了以下function:

  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)); }