¿Cómo obtener la densidad de la pantalla mediante programación en Android?
Quiero decir: ¿Cómo encontrar la ppp de pantalla del dispositivo actual?
android
dpi
screen-density
Praveen
fuente
fuente

getDisplayMetrics().xdpi, que se supone que devuelve el dpi real del dispositivo. Tenga en cuenta que los fabricantes no establecen este valor de forma coherente en todos los dispositivos, por lo que simplemente no puede usarlos . Triste pero cierto: la información sobre ppp reales no está disponible . Fuente: groups.google.com/d/msg/android-developers/g56jV0Hora0/…getResources().getDisplayMetrics().xdpiygetResources().getDisplayMetrics().ydpile dará densidades horizontales y verticales reales , que en la mayoría de los casos son diferentes.Respuestas:
Puede obtener información sobre la pantalla desde la estructura DisplayMetrics :
Aunque Android no utiliza un mapeo de píxeles directo, utiliza un puñado de valores cuantificados de píxeles independientes de densidad y luego se escala al tamaño real de la pantalla. Por lo que la
metrics.densityDpipropiedad será una de lasDENSITY_xxxconstantes (120,160,213,240,320,480o640dpi).Si necesita la densidad real de píxeles del lcd (quizás para una aplicación OpenGL), puede obtenerla de las propiedades
metrics.xdpiymetrics.ydpipara la densidad horizontal y vertical, respectivamente.Si está apuntando a niveles de API anteriores a 4. La
metrics.densitypropiedad es un factor de escala de coma flotante de la densidad de referencia (160 ppp). Semetrics.densityDpipuede calcular el mismo valor ahora proporcionado porfuente
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);se agregó oficialmente en la API 17, pero me sorprendió descubrir que funcionó correctamente incluso en un dispositivo 4.0 que probé.Esto también funciona:
Esto te dará:
0,75 - ldpi
1.0 - mdpi
1.5 - hdpi
2.0 - xhdpi
3.0 - xxhdpi
4.0 - xxxhdpi
ref: densidad
ref 2
fuente
WindowManager(por ejemplo, dentro de un cargador). Simplemente multiplíquelo por 160tvdpi. Para obtener más información sobretvdpiver aquíEsto funcionará en API nivel 4 y superior.
fuente
La respuesta de Blundell como método auxiliar estático:
fuente
Prueba esto:
fuente
Viewmucho más fácilmente (¡que es donde lo necesito!)Para obtener dpi:
fuente
Aquí están las constantes de densidad, fuente :
Hay, además de las densidades estándar, 5 intermedias. Teniendo en cuenta este hecho, el siguiente código será un ejemplo de trabajo completo:
Alternativamente, puede encontrar constantes de densidad usando
densityDpi:fuente
La siguiente respuesta es una pequeña mejora basada en la respuesta de qwertzguy.
fuente
En realidad, si desea tener el dpi de visualización real, la respuesta está en algún punto intermedio si consulta las métricas de visualización:
densidadDpi * 160 le dará los valores / sugerencia de qué densidad debe usar
como se especifica en publicaciones anteriores
pero
dm.xdpino siempre le dará el dpi REAL de la pantalla dada: Ejemplo:así que tal vez el dpi real de la pantalla debería ser Densidad * xdpi ... ¡pero no estoy seguro de si esta es la forma correcta de hacerlo!
fuente
Esto debería ayudar en su actividad ...
SALIDA
fuente
fuente
Si desea recuperar la densidad de un Servicio, funciona así:
fuente
Deberías probar esto. Acabo de agregar un método que encontrará y mostrará la tostada. Eso en qué categoría cae el dispositivo.
http://www.androidwarriors.com/2016/01/how-to-find-different-devices-screen.html
fuente
Esto debería funcionar.
fuente
Otra respuesta más:
fuente
Otra forma de obtener la densidad cargada por el dispositivo:
Crear
valuescarpetas para cada densidad.Agregue un recurso de cadena en sus respectivos
strings.xml:Luego, simplemente obtenga el recurso de cadena y tendrá su densidad:
Si la densidad es mayor que
XXXHDPI, su valor predeterminado seráXXXHDPIo si es menor deHDPIlo que será predeterminadoMDPILo dejé fuera
LDPI, porque para mi caso de uso no es necesario.fuente
Prueba esto...
En kotlin
Puede llamar
println("density: ${determineScreenDensityCode()}")y la salida seráSystem.out: density: xxxhdpifuente
Estoy usando el siguiente código para acceder a DPI desde los módulos (no es necesario tener acceso a un objeto de contexto):
fuente
En Android puedes obtener la densidad de pantalla de esta manera:
Y en Kotlin así:
Asegúrese de verificar regularmente si se agregan nuevas densidades .
fuente