2011-02-24 200 views

回答

180
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 
+7

密度值:http://developer.android.com/guide/practices/screens_support.html – esilver 2014-01-21 21:52:39

+1

@SteD是否有可能告诉设备是什么将?例如考虑在铲斗范围中间DPI为140的情况?它是向下还是向下? – wal 2016-06-29 06:12:40

+0

tvdpi约为1.3 – 2016-10-05 21:40:26

175

您可以查看屏幕密度:

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;我不打算保持这个答案。

+0

densityDpi无法解析 – virsir 2011-02-24 02:43:13

+0

它应该存在于SDK级别4(平台1.6)及以上。您使用的是什么SDK级别? (在SDK 3中,您可以使用SteD建议的'density')。 – 2011-02-24 02:49:22

+0

我需要定位到platform1.5。以下答案可能适合我的要求。 – virsir 2011-02-24 02:51:54

0

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

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

至4 values.xml文件,将它们放在相应的res/values- [xxx] /文件夹下。

+6

213dpi是一个众所周知的密度,“tvdpi”:http://developer.android.com/guide/practices/screens_support.html#qualifiers – 2014-02-04 19:37:49

1

从上面的答案,我将它们结合在一起,创造了以下功能:

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

} 
相关问题