Para volver una aplicación de android responsiva se debe tener en cuenta que un conjunto generalizado de pantallas que son las siguientes:
- XLarge son de 960dp x 720dp
- grandes son de 640dp x 480dp
- normales son de 470dp x 320dp
- pequeñas son de 426dp x 320dp
ademas se cuenta con un conjunto generalizado de seis densidades las cuales son las siguientes:
- LDPI(bajo) ~ 120ppp
- MDPI(medio) ~ 160dpi
- IPAD(alto) ~ 240ppp
- xhdpi(extra-alto) ~ 320dpi
- xxhdpi(extra-extra-alta) 480dpi
- xxxhdpi(extra-extra-extra-alta) 640dpi
para optimizar la interfaz de usuario para los diferentes tamaños de pantallas y densidades se puede proporcionar recursos alternativos según el tamaño y densidad, para lo cual en el momento de ejecución la aplicación utilizara los recursos adecuados. No es necesario proporcionar recursos alternativos para cada combinación de tamaño de la pantalla y la densidad. El sistema proporciona características de compatibilidad robustas que pueden manejar la mayor parte de la prestación de la aplicación en cualquier pantalla de los diferentes dispositivos, siempre que se haya implementado la interfaz de usuario utilizando técnicas que le permiten cambiar el tamaño.
Se debe asegurar una independencia de densidad, esta se puede lograr de las siguientes dos maneras:
- Manejo de la escala apropiada de DP para pantalla actual.
- Manejo de escalas de recursos estirables al tamaño adecuado, basado en la densidad de la pantalla.
se debe manejar un sistema de tamaño en pixeles px independiente para cada densidad.
se debe declarar un manifiesto de que tamaños de pantalla puede soportar la app, con esto se asegura que solo los dispositivos con las pantallas que cumplan con las condiciones para visualizar la app puedan descargarlo. Para definir el soporte de las pantallas se debe incluir el elemento
<supports-screens> en el manifiesto. Este elemento tiene los siguientes atributos:
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
donde cada atributo implica lo siguiente:
- android:resizeable: Indica si la aplicación puede cambiar de tamaño para los diferentes tamaños de pantalla. En la actualidad no es necesario usarlo se puede omitir, era indispensable en los android 1.5 y 1.6.
- android:smallScreens: Indica si la aplicación es compatible con pantallas pequeñas. Este atributo por defecto es "true".
-
android:normalScreens:Indica si la aplicación es compatible con una pantalla normal como una pantalla HVGA de densidad media, pero WQVGA baja densidad y de alta densidad WVGA también se considera normal. Este atributo es "true" por defecto.
-
android:largeScreens:Indica si la aplicación es compatible con pantallas grandes. Este atributo lo ideal es definirlo en toda app, se debe tener en cuenta que cuando se le da el valor de "false" este va a habilitar el modo de compatibilidad.
-
android:xlargeScreens:Indica si la aplicación es compatible con pantalla grandes, tales como una tablet o algun dispositivo mas grande, se debe definir en todas las aplicaciones este valor, se debe tener en cuenta que cuando se asigna el valor de "false", va activar el modo de compatabilidad de pantalla.
-
android:anyDensity: Indica si la aplicación incluye los recursos para dar cabida a cualquier densidad pantalla. Este valor es por defecto "true", la unica vez que se debe cambiar el valor de este atributo es si la aplicación manipula los mapas de bits.
-
android:requiresSmallestWidthDp: Especifica el smallestWidth mínimo requerido. El smallestWidth es la dimensión más corta del espacio de la pantalla (en dp unidades) que deben estar disponibles para su aplicación de interfaz de usuario, es decir, el más corto de dos dimensiones de la pantalla disponible.
-
android:compatibleWidthLimitDp: Este atributo le permite activar el modo de compatibilidad de pantalla como una característica de uso opcional especificando el máximo "ancho de la pantalla más pequeña" para la que su aplicación está diseñada.
-
android:largestWidthLimitDp: Este atributo le permite forzar a habilitar el modo de compatibilidad de pantalla mediante la especificación de la máxima "ancho de la pantalla más pequeña" para la que su aplicación está diseñada.Se debe proporcionaron diferentes tamaños de pantalla, para poder soportarlos, debido a que android por si solo puede tratar de adecuar la app para que ingrese en las diferentes tipos de pantalla, pero conlleva un costo en la presentación debido a que puede dejar los componentes muy pequeño o en ubicaciones erróneas.
Se puede proporcionar distintos diseños para los diferentes tamaños de pantallas, para esto se debe tener en cuenta lo siguiente:
Los calificadores de configuración que puede utilizar para proporcionar recursos de tamaño específico sonsmall normal large y xlarge.Por ejemplo, los diseños para una pantalla extra-grande deben ir enlayout-xlarge/. Los grupos de tamaños superiores están en desuso y en su lugar deben utilizar el sw<N>dp calificador de configuración para definir el ancho más pequeño disponible requerida por sus recursos de diseño. Por ejemplo, si su diseño de la tableta multi-panel requiere al menos 600dp del ancho de la pantalla, debe colocarlo en layout-sw600dp/
Se puede proporcionar diferentes dibujos en tamaños de bits para diferentes densidades de pantallas.
las imágenes pueden estar en formato .jpg, .png y .gif y dibujos Nine-Patch archivos .9.png. para que se dimensione en el tamaño físico apropiado para cada dispositivo. Para asegurarse de que los mapas de bits vean lo mejor posible, se debe incluir versiones alternativas en diferentes resoluciones para diferentes densidades de pantalla. Por ejemplo, los mapas de bits para las pantallas de alta densidad deben ir en drawable-hdpi/
En tiempo de ejecución, el sistema garantiza la mejor visualización posible en la pantalla con el siguiente procedimiento para cualquier recurso dado:
1. El sistema utiliza el recurso alternativo adecuado
Basado en el tamaño y la densidad de la pantalla actual, el sistema utiliza cualquier recurso tamaño y densidad específica prevista en la aplicación. Por ejemplo, si el dispositivo tiene una pantalla de alta densidad y la aplicación solicita un recurso adaptable, el sistema busca en un directorio de recursos adaptables el que mejor se adapte a la configuración del dispositivo. Dependiendo de los otros recursos alternativos disponibles, un directorio de recursos con el calificador hdpi (como
drawable-hdpi/) podría ser el mejor partido, por lo que el sistema utiliza el recurso adaptable de ese directorio.
2. Si no hay ningún recurso disponible, el sistema utiliza el recurso predeterminado y escala hacia arriba o hacia abajo según sea necesario para que coincida con el tamaño de la pantalla actual y la densidad
Los recursos "por defecto" son aquellos que no están marcados con un calificador de configuración. Por ejemplo, los recursos en drawable/ son los recursos adaptables predeterminados. El sistema asume que los recursos predeterminados están diseñados para el tamaño de la pantalla de línea de base y la densidad, que es un tamaño de la pantalla y densidad normal. Como tal, el sistema de escalas de recursos densidad predeterminada para las pantallas de alta densidad y hacia abajo para pantallas de baja densidad, según el caso.
Sin embargo, cuando el sistema está en busca de un recurso densidad específica y no lo encuentra en el directorio de densidad específica, no va a utilizar siempre los recursos predeterminados. El sistema puede utilizar en su lugar uno de los otros recursos densidad específica con el fin de ofrecer mejores resultados al escalar. Por ejemplo, cuando en busca de un recurso de baja densidad y no está disponible, el sistema prefiere escalar hacia abajo la versión de alta densidad del recurso, ya que el sistema puede escalar fácilmente un recurso de alta densidad a baja densidad por un factor de 0,5, con menos artefactos, en comparación con la ampliación de un recurso de densidad media por un factor de 0,75.
El uso de indices de configuración
Android es compatible con varios indices de configuración que permiten controlar cómo el sistema selecciona sus recursos alternativos en base a las características de la pantalla del dispositivo. Un indice de configuración es una cadena que puede añadir a un directorio de recursos en el proyecto Android y especifica la configuración para que los recursos en el interior están diseñados.
Para utilizar un indice de configuración:
- Cree un nuevo directorio en el de su proyecto
res/ directorio y el nombre con el formato:<resources_name>-<qualifier>
<resources_name> es el nombre del recurso estándar (como drawable o layout)
<qualifier> es un calificador de configuración de la tabla 1, a continuación, especifique la configuración de pantalla para que estos recursos han de usarse (como hdpi o xlarge)
Puede utilizar más de un <qualifier> a la vez, simplemente separar cada partido de clasificación con un guión.
- Guarde los recursos específicos de la configuración adecuados en este nuevo directorio. Los archivos de recursos deben ser nombrados exactamente los mismos que los archivos de recursos predeterminado.
Por ejemplo, xlarge es clasificatorio configuración para pantallas extra grandes. Cuando anexa esta cadena a un nombre de directorio de recursos (como el layout-xlarge indica al sistema que estos recursos se van a utilizar en dispositivos que tienen una pantalla extra-grande.
Tabla 1. calificadores de configuración que le permiten proporcionar recursos especiales para diferentes configuraciones de pantalla.
| Característica de la pantalla | Clasificatorio | Descripción |
| tamaño | small | Recursos para pantallas de tamaño pequeño. |
normal | Recursos para pantallas de tamaño normal. (Este es el tamaño de línea de base). |
| large | Recursos para pantallas de gran tamaño. |
xlarge | Recursos para pantallas extra grandes de tamaño. |
| Densidad | LDPI | Recursos para los de baja densidad (LDPI) pantallas (~ 120 ppp). |
MDPI | Recursos para los de densidad media (MDPI) pantallas (~ 160dpi).(Esta es la densidad de la línea de base). |
IPAP | Recursos para los de alta densidad (IPAP) pantallas (~ 240 ppp). |
xhdpi | Recursos para extra alta densidad (xhdpi) pantallas (~ 320dpi). |
xxhdpi | Recursos para los extra-extra-alta densidad (xxhdpi) pantallas (~ 480dpi). |
xxxhdpi | Recursos para los extra-extra-extra-alta densidad (xxxhdpi) usos (~ 640dpi). Utilice esto para el icono del lanzador solamente, ver notaanterior. |
nodpi | Recursos para todas las densidades. Estos son recursos independientes de la densidad. El sistema no escala los recursos etiquetados con este calificativo, independientemente de la densidad de la pantalla actual. |
tvdpi | Recursos para pantallas de algún lugar entre MDPI y IPAP;aproximadamente 213dpi. Esto no se considera un grupo de densidad "primaria". Está destinado principalmente para televisores y la mayoría de las aplicaciones no es así, proporcionar debería necesitar recursos MDPI y IPAP es suficiente para la mayoría de aplicaciones y el sistema se escala según proceda. Si cree que es necesario para proporcionar recursos tvdpi, debería tamaño de ellos en un factor de 1.33 * MDPI.Por ejemplo, una imagen de 100px x 100px para pantallas MDPI debe ser 133px x 133px para tvdpi. |
| Orientación | land | Recursos para pantallas de la orientación horizontal (relación de aspecto ancho). |
| port | Recursos para pantallas de la orientación vertical (relación de aspecto de altura). |
| Relación de aspecto | long | Recursos para las pantallas que tienen una relación de aspecto significativamente más alto o más amplio (cuando está en orientación vertical u horizontal, respectivamente) que la configuración de pantalla de línea de base. |
| notlong | Recursos para pantallas de uso que tienen una relación de aspecto que es similar a la configuración de pantalla de línea de base |
trazado para los diferentes tamaños de pantalla y diferentes dibujables. Utilice los mipmap/ carpetas para los iconos del lanzador.
res/layout/my_layout.xml // layout for normal screen size ("default")
res/layout-large/my_layout.xml // layout for large screen size
res/layout-xlarge/my_layout.xml // layout for extra-large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientation
res/drawable-mdpi/graphic.png // bitmap for medium-density
res/drawable-hdpi/graphic.png // bitmap for high-density
res/drawable-xhdpi/graphic.png // bitmap for extra-high-density
res/drawable-xxhdpi/graphic.png // bitmap for extra-extra-high-density
res/mipmap-mdpi/my_icon.png // launcher icon for medium-density
res/mipmap-hdpi/my_icon.png // launcher icon for high-density
res/mipmap-xhdpi/my_icon.png // launcher icon for extra-high-density
res/mipmap-xxhdpi/my_icon.png // launcher icon for extra-extra-high-density
res/mipmap-xxxhdpi/my_icon.png // launcher icon for extra-extra-extra-high-density