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

时间:2011-02-24 01:56:02

标签: android size screen

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

7 个答案:

答案 0 :(得分:207)

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

答案 1 :(得分:183)

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

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。有关最新信息,请咨询the docs;我不打算维持这个答案。

答案 2 :(得分:4)

截至2018年,您可以使用以下方法-

OR                          

NID         id
84015283    84015283
84015283    84069198
84015283    84070263
84015283    84369603
84015283    85061159
87065122    87065122

但是正如@Ted指出的那样,在使用前请先查阅官方文档

答案 3 :(得分:3)

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

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

}

答案 4 :(得分:1)

让React Native检查当前设备的大小

Localizable.string

答案 5 :(得分:0)

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

  

< item type =“bool”   name =“is_mdpi”> [bool]< / item>
< item   类型=“布尔”   name =“is_hdpi”> [bool]< / item>
< item   类型=“布尔”   name =“is_xhdpi”> [bool]< / item>
< item   类型=“布尔”   名称= “is_xxhdpi” > BOOL]< /项目>

到4个values.xml文件,将它们放在相应的res / values- [xxx] / folders。

答案 6 :(得分:0)

您应该始终检查间隔,不仅要检查断点值!

根据android文档:https://developer.android.com/reference/android/util/DisplayMetrics

在Kotlin中进行如下检查:

df <- structure(list(Provider = c("Nestle", "Heineken", "Hagen Dazs"
), `2017-01-01` = c("12", "-", "5"), `2017-01-02` = c("10", "3", 
"-"), `2017-01-03` = c("8", "1", "-"), `2017-01-04` = c("12", 
"3", "2")), row.names = c(NA, -3L), class = "data.frame")