android - wcpw - ¿Cuál es la diferencia entre-anydpi y-nodpi?
defiant wrestling wikipedia (4)
nodpi
Estos son recursos independientes de la densidad. El sistema no escala los recursos etiquetados con este calificador, independientemente de la densidad de la pantalla actual.
Por ejemplo:
- drawable- nodpi /dot.png
El punto aparecerá pequeño en xxhdpi, grande en ldpi.
Sin embargo, el solucionador de recursos coincidirá con un calificador específico si existe.
Por ejemplo
- drawable- hdpi /eg.png
- dibujable- nodpi -v21 / eg.xml
En un dispositivo hdpi Lollipop (API 21), se utiliza el mapa de bits .
En un dispositivo xhdpi Lollipop (API 21), se usa el vector.
anydpi
Estos recursos tienen prioridad en cualquier dpi.
Por ejemplo
- drawable- hdpi /eg.png
- drawable- anydpi -v21 / eg.xml
En un dispositivo hdpi Lollipop (API 21), se utiliza el vector .
En un dispositivo xhdpi Lollipop (API 21), se usa el vector.
Referencia
Nota : anydpi se agregó en el cambio Ic3288d0236fe0bff20bb1599aba2582c25b0db32 .
Si utiliza el asistente de Vector Asset en Android Studio 1.5.0, cualquier XML dibujable de vector que importe utilizando ese asistente entrará en
res/drawable/
.
Sin embargo, el directorio
build/
y el APK resultante muestran que esos archivos XML se trasladan a un directorio
res/drawable-anydpi-v21/
resource.
La parte
-v21
tiene sentido, ya que
VectorDrawable
solo es compatible con API Nivel 21+.
Sin embargo,
-anydpi
parece no estar documentado.
Hubiera esperado
-nodpi
, tanto para el destino de importación original como para el lugar donde el sistema de compilación elige moverlo.
¿Alguien ha visto declaraciones oficiales de lo que significa
-anydpi
y cuál es su relación con
-nodpi
?
Estoy buscando efectos prácticos, no solo lo que sugieren algunos comentarios de código.
El código fuente contiene los siguientes comentarios (línea 639):
/**
* Value for {@link #densityDpi} for resources that scale to any density (vector drawables).
* {@hide}
*/
public static final int DENSITY_DPI_ANY = 0xfffe;
/**
* Value for {@link #densityDpi} for resources that are not meant to be scaled.
* {@hide}
*/
public static final int DENSITY_DPI_NONE = 0xffff;
Espero que esto aclare la confusión.
Utilizo drawable-nodpi para todo, y tengo muchos gráficos grandes. Una consecuencia indocumentada de ''ampliar'' sus gráficos es que aumenta el uso de memoria exponencialmente. Entonces, si tiene un gráfico de 100M en ''dibujable'', se escalará a 400M o 1.6G dependiendo de qué tan alta sea la resolución del dispositivo del usuario. Y las resoluciones de los dispositivos siguen subiendo. Esa ampliación no aumenta la "nitidez" de los gráficos, por supuesto. Las acciones de dibujo pueden indicar qué tan grandes deben ser los gráficos en relación con el tamaño de la pantalla de todos modos, no es necesario hinchar la aplicación con múltiples carpetas de dibujo.
nodpi
: Recursos para todas las densidades.
Estos son recursos independientes de la densidad.
El sistema no escala los recursos etiquetados con este calificador, independientemente de la densidad de la pantalla actual.
anydpi
: este calificador coincide con todas las densidades de pantalla y tiene prioridad sobre otros calificadores.
Esto es útil para vectores dibujables.
Agregado en API Nivel 21.