¿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().xdpi
ygetResources().getDisplayMetrics().ydpi
le 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.densityDpi
propiedad será una de lasDENSITY_xxx
constantes (120
,160
,213
,240
,320
,480
o640
dpi).Si necesita la densidad real de píxeles del lcd (quizás para una aplicación OpenGL), puede obtenerla de las propiedades
metrics.xdpi
ymetrics.ydpi
para la densidad horizontal y vertical, respectivamente.Si está apuntando a niveles de API anteriores a 4. La
metrics.density
propiedad es un factor de escala de coma flotante de la densidad de referencia (160 ppp). Semetrics.densityDpi
puede 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 sobretvdpi
ver aquíEsto funcionará en API nivel 4 y superior.
fuente
La respuesta de Blundell como método auxiliar estático:
fuente
Prueba esto:
fuente
View
mucho 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.xdpi
no 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
values
carpetas 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áXXXHDPI
o si es menor deHDPI
lo que será predeterminadoMDPI
Lo 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: xxxhdpi
fuente
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