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

vir*_*sir 116 size android screen

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

Ste*_*teD 217

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
Run Code Online (Sandbox Code Playgroud)

  • 密度值描述于:http://developer.android.com/guide/practices/screens_support.html (8认同)
  • 对于nexus 6p,我得到3.5,它将属于哪一类? (2认同)
  • oneplus3T有2.625,我们应该考虑什么? (2认同)

Ted*_*opp 186

您可以使用以下方法检查屏幕密度:

switch (getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
    // ...
    break;
case DisplayMetrics.DENSITY_MEDIUM:
    // ...
    break;
case DisplayMetrics.DENSITY_HIGH:
    // ...
    break;
case DisplayMetrics.DENSITY_XHIGH:
    // ...
    break;
}
Run Code Online (Sandbox Code Playgroud)

编辑请注意,随着Android的发展,其他值应包含在switch案例中.在此编辑中,这包括DisplayMetrics.DENSITY_TVDisplayMetrics.DENSITY_XXHIGH.查阅文档以获取最新信息; 我不打算保持这个答案.

  • 以下答案现在是上面的答案,需要更通用;) (4认同)

Ank*_*wal 7

As of 2018, you can use the below method -

    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";
    }
}
Run Code Online (Sandbox Code Playgroud)

But as @Ted pointed always consult the official docs before using


Nav*_*mad 5

从上面的答案中,我将它们组合起来并创建了以下函数:

    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;
}
Run Code Online (Sandbox Code Playgroud)

现在,您想在哪个设备上获取密度信息以及将使用哪个文件夹,只需在该活动中添加上述方法并在 onCreate 中添加以下行

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    Log.d("Screen Density: ", Helper.getDeviceDensity(this));

}
Run Code Online (Sandbox Code Playgroud)