2011-02-24 11 views

Respuesta

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

los valores de densidad descritos en: http://developer.android.com/guide/practices/screens_support.html – esilver

+1

@SteD es posible saber lo que es un dispositivo ¿va a ser? por ejemplo, considere el caso en que el dpi es 140 en el medio del rango del cucharón? ¿redondea hacia abajo o hacia arriba? – wal

+0

tvdpi es aproximadamente 1.3 –

175

Puede comprobar la densidad de pantalla con:

switch (getResources().getDisplayMetrics().densityDpi) { 
case DisplayMetrics.DENSITY_LOW: 
    // ... 
    break; 
case DisplayMetrics.DENSITY_MEDIUM: 
    // ... 
    break; 
case DisplayMetrics.DENSITY_HIGH: 
    // ... 
    break; 
case DisplayMetrics.DENSITY_XHIGH: 
    // ... 
    break; 
} 

EDITAR Tenga en cuenta que a medida que evoluciona Android, otros valores deben ser incluidos en los switch casos. A partir de esta edición, esto incluye DisplayMetrics.DENSITY_TV y DisplayMetrics.DENSITY_XXHIGH. Consulte the docs para obtener la información más reciente; No voy a molestarme en mantener esta respuesta.

+0

densityDpi no se puede resolver – virsir

+0

Se supone que existe en SDK nivel 4 (plataforma 1.6) y superior. ¿Qué nivel de SDK estás usando? (En SDK 3, puede usar 'density' como lo sugiere SteD.) –

+0

Necesito apuntar a platform1.5. La respuesta a continuación puede ser adecuada para mi solicitud. – virsir

0

En algunos dispositivos (el mío es Galaxy Tab3), tanto la densidad como la densidadDpi devuelven valores extraños como 1.33 (densidad), 213 (densidadDpi). Así que mi solución es añadir estos bandera:

< tipo de elemento = " bool " name = " is_mdpi " > [BOOL] </artículo >
< elemento type = " bool " name = " is_hdpi " > [bool] </item >
< item type = " bool " name = " is_xhdpi " > [bool] </artículo >
< artículo type = " bool " name = " is_xxhdpi " > [bool] </artículo >

-4 values.xml archivos, colóquelos debajo de res/values- [xxx]/folders correspondientes.

+6

213dpi es una densidad conocida, "tvdpi": http://developer.android.com/guide/practices/screens_support.html#qualifiers –

1

De las respuestas anteriores, les combinada y creé la siguiente función:

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

Ahora, el dispositivo que desea obtener la información de densidad y en qué carpeta se va a utilizar, sólo tiene que añadir el método anterior en la que la actividad y añadir la siguiente línea en onCreate

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

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

} 
Cuestiones relacionadas