martes, 26 de febrero de 2013

2.1 - Problematica de Pantallas en Android


Multiples Dispositivos, Multiples Pantallas

Android corre en una variedad de dispositivos que ofrecen diferentes tamaños de pantalla y densidades. Para las aplicaciones, el sistema Android ofrece un entorno de desarrollo coherente en todos los dispositivos y se encarga de la mayor parte del trabajo para ajustar la interfaz de cada usuario de la aplicación a la pantalla en la que se muestra. Al mismo tiempo, el sistema proporciona APIs que le permiten controlar la interfaz de usuario de la aplicación para tamaños de pantalla y densidades específicas con el fin de optimizar el diseño de interfaz de usuario. Por ejemplo, es posible que desee una interfaz de usuario para tablets que es diferente de la interfaz de usuario para los teléfonos.
Aunque el sistema lleva a cabo la ampliación y cambio de tamaño pantallas, el desarrollador debe hacer el esfuerzo para optimizar su aplicación para los diferentes tamaños de pantalla y densidades. De este modo, se maximiza la experiencia del usuario para todos los dispositivos dando la sensación de que su aplicación fue diseñada realmente para su/sus dispositivos en lugar de ser un mero ajuste a la pantalla en sus dispositivos.
Con este documento se pretende permitir la creación de aplicaciones que se muestren correctamente en todas las configuraciones de pantalla posibles. desde un unico archivo .apk
Para una mayor profundidad sobre este tema se recomienda la lectura de la Guía Oficial de Android del Desarrollador

Descripción del Soporte de Pantallas 

Esta sección proporciona una visión general del soporte de Android para múltiples pantallas, incluyendo: una introducción a los términos y conceptos utilizados en este documento y en la API y un resumen de las configuraciones de pantalla que el sistema soporta.

Términos y conceptos

Tamaño de la pantalla

Tamaño físico real, se mide como la diagonal de la pantalla.
Para simplificar, los tamaños de pantalla en Android se dividen en 4 grupos: small, normal, large, y extra large.

Densidad de pantalla

La cantidad de pixeles dentro de un área física de la pantalla; referida generalmente como dpi (puntos por pulgada). Por ejemplo, una "baja" densidad pantalla tiene menos píxeles en un área determinada físico, frente a una pantalla de densidad "normal" o "alta".
Para simplificar, las densidades de pantalla en Android se dividen en 4 grupos: low, medium, high, y extra high.
Figura 1. Ilustración de cómo Android aproximadamente asigna tamaños reales y densidades de pantalla (las cifras no son exactas).

Orientación

La orientación de la pantalla desde el punto de vista del usuario. Este puede ser horizontal (landscape) o vertical (portrait). Tenga en cuenta que no sólo los diferentes dispositivos operan en diferentes orientaciones por defecto, pero se puede cambiar la orientación en tiempo de ejecución cuando el usuario gira el dispositivo.

Resolución

El número total de píxeles físicos en una pantalla. Las aplicaciones deben referirse únicamente mediante el tamaño de pantalla y la densidad, encuadrandolas para los diferentes grupos de tamaños y densidades de pantalla.

Pixeles independientes de la densidad (dp)

Una unidad de pixel virtual que se debe utilizar en la definición de diseño de interfaz de usuario, para expresar dimensiones del diseño o la posición de una manera independiente de la densidad.
La densidad de un pixel independiente es equivalente a un píxel físico en una pantalla de 160 dpi, que es la densidad de línea de base asumida por el sistema para una pantalla de densidad "medium". En tiempo de ejecución, el sistema maneja de manera transparente cualquier escala de las unidades de DP, según sea necesario, en base a la densidad real de la pantalla en uso. La conversión de las unidades de DP a píxeles de la pantalla es simple: px = dp * (dpi / 160) . Por ejemplo, en una pantalla de 240 dpi, 1 dp es igual a 1,5 pixeles físicos. Siempre se debe usar unidades dp la hora de definir la interfaz de usuario de la aplicación para garantizar la correcta visualización de la misma en pantallas con diferentes densidades.

Rango de pantallas compatibles

Para optimizar la interfaz de usuario de la aplicación para los diferentes tamaños de pantalla y densidades se debe proporcionar diseños alternativos para algunos de los diferentes tamaños y diferentes imágenes para diferentes densidades. En tiempo de ejecución, el sistema utiliza los recursos adecuados para su aplicación, en función del tamaño o densidad de la pantalla del dispositivo.
No es necesario proporcionar recursos alternativos para cada combinación de tamaño de pantalla y densidad. El sistema proporciona sólidas funciones de compatibilidad que pueden manejar la presentación de su aplicación en cualquier pantalla del dispositivo, siempre y cuando se haya implementado la interfaz de usuario utilizando técnicas que le permiten cambiar el tamaño. Mas informacion.

Independencia de densidad

Su aplicación alcanza la "independencia de densidad" cuando se preserva el tamaño físico (desde el punto de vista del usuario) de elementos de la interfaz de usuario cuando se muestra en las pantallas con diferentes densidades.
Mantener la independencia densidad es importante porque, sin ella, un elemento de interfaz de usuario (tal como un botón) aparece físicamente más grande en una pantalla de baja densidad y más pequeño en una pantalla de alta densidad. Tales cambios relacionados con la densidad del tamaño pueden causar problemas de diseño y usabilidad en su aplicación. Las figuras 2 y 3 muestran la diferencia entre una aplicación cuando no proporciona independencia de la densidad y cuando lo hace, respectivamente.

Figura 2. Ejemplo de aplicación sin soporte para diferentes densidades, como se muestra en pantallas de  baja, media y alta densidad.

Figura 3. Ejemplo de aplicación con un buen soporte para diferentes densidades (que es independiente de la densidad), como se muestra en las pantallas de baja densidad, media y alta.
El sistema ayuda a que su aplicación Android lograr la independencia densidad de dos maneras:
  • Mediante el sistema de escalas dp (según sea apropiado para la densidad de pantalla actual)
  • La existencia de los recursos del sistema para los tamaños y densidades adecuados.

Cómo soportar  las pantallas múltiples en nuestras aplicaciones

El sistema Android se encarga de la mayor parte del trabajo para hacer que su aplicación se muestre correctamente en cada configuración de pantalla según el caso; pero para manejar con más gracia diferentes configuraciones de pantalla también se debe:
  • Declarar explícitamente en el manifest los tamaños de pantalla que admite la aplicación
    Al declarar que tamaños de pantalla soporta la aplicación puede asegurar que sólo los dispositivos con dichas pantallas pueden descargar la aplicación. 
    Para declarar los tamaños de pantalla de la aplicación admite, debe incluir el elemento <supports-screens> elemento en el archivo manifiest.
  • Proporcionar diferentes diseños para diferentes tamaños de pantalla
    Por defecto, Android redimensiona el diseño de aplicaciones para adaptarse a la pantalla del dispositivo actual. En la mayoría de los casos, esto funciona bien. En otros casos, la interfaz de usuario no puede tener un aspecto tan bueno, y podría necesitar ajustes para diferentes tamaños de pantalla. Por ejemplo, en una pantalla más grande, es posible que desee ajustar la posición y el tamaño de algunos elementos para aprovechar el espacio de pantalla adicional, o en una pantalla más pequeña, puede que tenga que ajustar el tamaño para que todo quepa en la pantalla.
    Los calificadores de configuración que puede utilizar para proporcionar recursos específicos de tamaño son smallnormallarge, y xlarge. Por ejemplo, los diseños para una pantalla extra grande debe ir en layout-xlarge/.
    A partir de Android 3.2 (nivel de API 13), los grupos de tamaños superiores están en desuso y en su lugar debe utilizar el sw<N>dp como calificativo para definir el ancho más pequeño requerida por sus recursos. Por ejemplo, si el diseño requiere al menos 600dp de ancho de la pantalla, debe colocarlo en layout-sw600dp/.
    El uso de estas nuevas técnicas para la declaración de los recursos de diseño se discute en la sección Declaring Tablet Layouts for Android 3.2.
  • Proporcionar drawables diferentes para densidades de pantalla diferentes
    Por defecto, Android escala los drawables (.png , .jpg y .gif)  para que se representen adecuadamente en cada dispositivo, aunque esta escala puede causar deformaciones. Para garantizar que sus mapas de bits vean lo mejor posible, debe incluir versiones alternativas en distintas densidades.
    Los calificadores de configuración que puede utilizar para determinados recursos son ldpi (bajo), mdpi (medio), hdpi(alto), and xhdpi (extra alto). Por ejemplo, los mapas de bits para pantallas de alta densidad debe ir en drawable-hdpi/.

Usando calificadores de configuración

Android soporta varios calificadores de configuración que le permiten controlar la forma en que el sistema selecciona tus recursos alternativos basados ​​en las características de la pantalla del dispositivo actual. Un calificador 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 se han diseñado dentro.
Para utilizar un calificador de configuración:
  1. Crear un nuevo directorio en el directorio res/ de suproyecto con el nombre con el  siguiente formato:<resources_name>-<qualifier>
    • <resources_name> es el nombre del recurso estándar (como drawable o layout).
    • <qualifier> es calificador de configuración (ver Tabla 1 a continuación) tales como hdpi or xlarge.
    Se puede utilizar más de un <qualifier> a la vez, simplemente separado cada calificador con un guión.
  2. Guardar la configuración adecuada de recursos específicos en este nuevo directorio. Los archivos de recursos se debe llamar exactamente igual que los archivos de recursos predeterminados.
Tabla 1. calificadores de configuración que le permiten proporcionar recursos especiales para configuraciones de pantalla.
Característica de la pantalla CalificadorDescripción
TamañosmallRecursos para las pantallas de tamaño pequeño .
normalRecursos para pantallas de tamaño normal(Este es el tamaño de referencia.)
largeRecursos para pantallas de tamaño grande.
xlargeRecursos para pantallas de tamaño extra grande.
DensidadldpiRecursos para pantallas de baja densidad ( ldpi) (~ 120 ppp).
mdpiRecursos para pantallas de densidad media ( mdpi) (~ 160dpi). (Esta es la densidad base.)
hdpiRecursos para pantallas de alta densidad ( hdpi) (~ 240 ppp).
xhdpiRecursos para pantallas de muy alta densidad (xhdpi) (~320dpi).
nodpiRecursos para todas las densidades. Estos son independientes de la densidad de los recursos. El sistema escala los recursos etiquetados con este calificador, independientemente de la densidad de la pantalla actual.
tvdpiRecursos para las pantallas en algún lugar entre mdpi y hdpi, aproximadamente 213dpi. 
OrientaciónlandLos recursos para las pantallas de la orientación horizontal 
portLos recursos para las pantallas de la orientación vertical 


Por ejemplo, la siguiente es una lista de directorios de recursos en una aplicación que ofrece diferentes diseños para diferentes tamaños de pantalla y diferentes drawables para las pantallas de densidad media, alta y extra alta.
es/layout/my_layout.xml             // layout for normal screen size ("default")res/layout-small/my_layout.xml       // layout for small screen sizeres/layout-large/my_layout.xml       // layout for large screen sizeres/layout-xlarge/my_layout.xml      // layout for extra large screen sizeres/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation
res/drawable-mdpi/my_icon.png        // bitmap for medium densityres/drawable-hdpi/my_icon.png        // bitmap for high densityres/drawable-xhdpi/my_icon.png       // bitmap for extra high density


Para obtener más información acerca de cómo utilizar los recursos alternativos y una lista completa de los calificadores de configuración (no sólo para configuraciones de pantalla), vea Providing Alternative Resources.
Consejo: Si se tienen algunos recursos dibujable que el sistema nunca debe escalar, deben colocarlse en un directorio con el nodpi como calificador de configuración. Recursos con esta clasificación el sistema no los escala.

Diseñar esquemas alternativos y dibujables

En las secciones siguientes se resume cómo es posible que desee utilizar los calificativos de tamaño y densidad para proporcionar diseños alternativos y drawables, respectivamente.

Diseños alternativos

En general, se sabrá si se necesitan diseños alternativos para diferentes tamaños de pantalla una vez que pruebe la aplicación en diferentes configuraciones de pantalla. Por ejemplo:
  • Cuando se prueba en una pequeña pantalla, es posible que descubra que el diseño no acaba de encajar en la pantalla. Por ejemplo, una fila de botones podrían no encajar en el ancho de la pantalla en un dispositivo de pantalla pequeña. En este caso, debe proporcionar un diseño alternativo para pantallas pequeñas que ajuste el tamaño o la posición de los botones.
  • Cuando se prueba en una pantalla extra grande, es posible darse cuenta de que su diseño no hace un uso eficiente de la gran pantalla. En este caso, usted debe proporcionar una disposición alternativa para grandes pantallas que proporciona una interfaz de usuario rediseñada.
  • Y, cuando se prueba en posición horizontal respecto a la orientación vertical, puede notar que los elementos de interfaz de usuario colocados en la parte inferior de la pantalla para la orientación vertical deben estar en el lado derecho de la pantalla con orientación horizontal.
En resumen, usted debe estar seguro de que el diseño de la aplicación:
  • Se adapta en pantallas pequeñas (para que los usuarios puedan utilizar la aplicación)
  • Está optimizado para pantallas más grandes para aprovechar el espacio de pantalla adicional
  • Está optimizado tanto para la orientación vertical y paisaje
Si la interfaz de usuario utiliza mapas de bits que necesitan adaptarse al tamaño de la vista (como la imagen de fondo de un botón), se debe utilizar archivos  Nine-Patch.

Drawables alternativos


Figura 4. Drawables segun tamaños relativos de mapa de bits que soportan cada densidad.
Casi todas las aplicaciones deben tener alternativas para los recursos drawable para densidades de pantalla diferentes, ya que casi todas las aplicaciones tiene un icono de lanzador y el icono debe lucir bien en todas las densidades de pantalla. Del mismo modo, si se incluyen otros drawables en su aplicación (por ejemplo, para los iconos de menú u otros gráficos en su aplicación), debe proporcionar versiones alternativas para diferentes densidades.
Para crear alternativas drawables para diferentes densidades, debe seguir la relación de escala 3:4:6:8 entre las cuatro densidades generalizadas. Por ejemplo, si usted tiene un drawable que es 48x48 píxeles para la pantalla de densidad media (el tamaño de un icono de lanzador), todos los tamaños deben ser:
  • 36x36 de baja densidad
  • 48x48 de media densidad
  • 72x72 de alta densidad
  • 96x96 de muy alta densidad
Para obtener más información sobre los iconos de diseño, consulte las Instrucciones de diseño de iconos , que incluye información para drawables diferentes, tales como iconos, iconos de lanzador de menú, iconos de la barra de estado, y más.

La declaración de diseños para Tablet Android 3.2


Para la primera generación de tablets con Android 3.0, la forma correcta de declarar diseños de tablet era ponerlos en un directorio con el calificador de configuración xlarge  (por ejemplo, res/layout-xlarge/). Con el fin de acomodar otros tipos de tabletas y tamaños de pantalla Android 3,2 introduce una nueva forma para especificar los recursos para tamaños de pantalla más discretos. La nueva técnica se basa en la cantidad de espacio en el diseño necesita (por ejemplo, 600dp de ancho), en lugar de tratar de hacer que el diseño se acomode a uno de los grupos de tamaño generalizadas (como large extra large).
Android permite especificar sus recursos de diseño basado en la anchura y / o altura de la pantalla para el diseño de la aplicación, lo cual se especifica en unidades de DP. Por ejemplo, después de haber concebido el diseño que desea utilizar para dispositivos tipo tableta, es posible determinar que el diseño deja de funcionar bien cuando la pantalla es inferior a 600dp de ancho. Este umbral se convierte así en el tamaño mínimo que se requiere para su diseño tablet. Por lo tanto, ahora se puede especificar que estos recursos de diseño debe ser utilizado sólo cuando hay al menos 600dp de ancho disponible para la interfaz de usuario de la aplicación.

Usando nuevos calificadores de tamaño

Las configuraciones de recursos diferentes que se pueden especificar en función del espacio disponible para su diseño se resumen en la tabla 2. Estos calificadores nuevos ofrecen un mayor control sobre los tamaños de pantalla de su aplicación es compatible, en comparación con los tradicionales grupos de tamaño de pantalla (pequeña, grande normal, y xlarge).
Tabla 2. calificadores  de la nueva configuración para el tamaño de pantalla (introducidas en Android 3.2).
Pantalla de configuraciónValores clasificatoriosDescripción
smallestWidthsw<N>dp

Ejemplos:sw600dpsw720dp

El tamaño fundamental de una pantalla, como se indica por la dimensión más corta del área de pantalla disponible. En concreto, smallestWidth del dispositivo es el más corto de altura disponible de la pantalla y el ancho (también se puede pensar en él como el "menor anchura posible" para la pantalla). Puede utilizar este calificativo para garantizar que, independientemente de la orientación actual de la pantalla, la aplicación tiene por lo menos <N> dps de ancho para que la interfaz de usuario.
Ancho de pantalla disponiblew<N>dp

Ejemplos:w720dpw1024dp

Especifica un ancho mínimo disponible en las unidades de DP en el que los recursos deben ser utilizados definida por el <N> valor. Valor correspondiente del sistema para que los cambios de ancho cuando la orientación de la pantalla cambia entre horizontal y vertical para reflejar el ancho real de corriente que está disponible para su interfaz de usuario.
Altura de pantalla disponibleh<N>dp

Ejemplos:h720dph1024dp etc 


Especifica una altura mínima de pantalla en las unidades de DP en el que los recursos deben ser utilizados definida por el <N> valor. Valor correspondiente del sistema para que los cambios de altura cuando la orientación de la pantalla cambia entre horizontal y vertical para reflejar la altura real de corriente que está disponible para su interfaz de usuario.
Para más discusión sobre estos calificadores vease  Providing Resources

Ejemplos de configuración

Para ayudar a apuntar algunos de sus diseños para diferentes tipos de dispositivos, aquí vemos  algunas cifras para anchos de pantalla típicos:
  • 320dp: una pantalla de teléfono normal (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
  • 480dp: una tablet tweener (480x800 mdpi).
  • 600dp: un 7" tablet (600x1024 mdpi).
  • 720dp: un 10" tablet  (720x1280 mdpi, 800x1280 mdpi, etc).
Con la fase de clasificación del tamaño de la tabla 2, la aplicación puede cambiar entre sus recursos de diseño para diferentes teléfonos y tabletas utilizando cualquier número que desee para la anchura y / o altura. Por ejemplo, si 600dp es la menor anchura soportada par si tableta, puede proporcionar a estos dos tipos de diseños:
res/layout/main_activity.xml           # For handsets
res/layout-sw600dp/main_activity.xml   # For tablets
En los demás casos en los que desea personalizar aún más la interfaz de usuario a diferenciar entre los tamaños como 7" y 10" tablets, se puede definir más diseños adicionales de ancho:
res/layout/main_activity.xml           # For handsets (smaller than 600dp available width)
res/layout-sw600dp/main_activity.xml   # For 7” tablets (600dp wide and bigger)
res/layout-sw720dp/main_activity.xml   # For 10” tablets (720dp wide and bigger)
Observe que los últimos dos conjuntos de recursos de ejemplo de uso de la "anchura más pequeña" calificador,sw <N> dp , que especifica el más pequeño de los dos lados de la pantalla, independientemente de la orientación actual del dispositivo. Así, utilizando sw <N> dp es una forma sencilla de especificar el tamaño total de la pantalla disponible para su distribución al ignorar orientación de la pantalla.
Sin embargo, en algunos casos, lo que podría ser importante para su diseño es exactamente la cantidad de anchura o altura es actualmente disponible. Por ejemplo, si usted tiene un diseño de dos paneles con dos fragmentos de lado a lado, es posible que desee utilizar siempre que la pantalla ofrece al menos 600dp de ancho, si el dispositivo está en orientación horizontal o vertical. En este caso, los recursos podría tener este aspecto:
res/layout/main_activity.xml         # For handsets (smaller than 600dp available width)
res/layout-w600dp/main_activity.xml  # Multi-pane (any screen with 600dp available width or more)
Observe que el segundo grupo está utilizando el "ancho disponible" calificador, w <N> dp . De esta manera, un solo dispositivo puede realmente utilizar ambos diseños, dependiendo de la orientación de la pantalla (si la anchura disponible es al menos 600dp en una orientación y menos de 600dp en la otra orientación).
Si la altura disponible es una preocupación para usted, entonces usted puede hacer lo mismo con el <N> h dpcalificador. O, incluso combinan la w <N> dp y <N> h dp calificadores si necesita ser muy específico.

La declaración de apoyo tamaño de pantalla

Una vez que haya aplicado sus diseños para diferentes tamaños de pantalla, es igualmente importante que se declare en el archivo manifest que pantallas admite la aplicación.
Junto con la fase de clasificación de la nueva configuración de tamaño de pantalla, Android 3.2 introduce nuevos atributos para el <supports-screens> elemento manifiesto:
android:requiresSmallestWidthDp
Especifica el smallestWidth mínimo requerido. El smallestWidth es la dimensión más corta del espacio de la pantalla (en unidades dp ). (Por lo general, el valor que se proporciona para esto es el "ancho más pequeño" que el diseño soporta, independientemente de la orientación actual de la pantalla.)
Por ejemplo, si su aplicación es sólo para dispositivos tipo tableta con 600dp de menor anchura disponible:
<Manifest ... > 
    <supports-screens  android:requiresSmallestWidthDp = "600"  /> 
    ... </ manifest>
Sin embargo, si su aplicación es compatible con todos los tamaños de pantalla compatibles con Android, entonces no es necesario declarar este atributo, ya que el menor ancho de su aplicación requiere es la menor posible en cualquier dispositivo.
Precaución: El sistema Android no prestar atención a este atributo, por lo que no afecta a cómo se comporta la aplicación en tiempo de ejecución. En su lugar, se utiliza para habilitar el filtrado para su aplicación en servicios como Google Play. Sin embargo, Google Play actualmente no admite este atributo para filtrar (con Android 3.2), por lo que debe continuar utilizando los atributos de otros tamaños si su aplicación no es compatible con pantallas pequeñas.
Para obtener más información ver <supports-screens>.

Mejores Prácticas


El objetivo de soportar múltiples pantallas es crear una aplicación que pueda funcionar correctamente y se vea bien en cualquiera de las configuraciones de pantalla generalizadas compatibles con Android. En las secciones anteriores de este documento proporcionan información acerca de cómo Android se adapta a su aplicación a las configuraciones de pantalla y cómo se puede personalizar el aspecto de su aplicación en diferentes configuraciones de pantalla. Esta sección proporciona algunos consejos adicionales y una visión general de las técnicas que ayudan a asegurarse de que su aplicación se escala correctamente para configuraciones de pantalla diferentes.
Aquí está una lista rápida de cómo se puede asegurar que la aplicación muestra correctamente en pantallas diferentes:
  1. Utilice wrap_content , fill_parent o unidades dp al especificar dimensiones en un archivo de formato XML
  2. No utilice los valores de píxeles en el código
  3. No utilice AbsoluteLayout (está en desuso)
  4. Suministre drawables alternativos para densidades de pantalla diferentes
En las secciones siguientes se proporcionan más detalles.

1. Use wrap_content, fill_parent, o la unidad de DP para dimensiones del diseño

Al definir el android:layout_width y Android:layout_height para vistas en un archivo de formato XML, utilizando "wrap_content" , "fill_parent" o unidades dp se garantiza que a la vista se le da un tamaño apropiado en la pantalla del dispositivo actual.
Por ejemplo, una vista con un layout_width = "100dp" mide 100 pixeles de ancho en la pantalla de densidad media y hasta 150 píxeles de ancho en la pantalla de alta densidad, de modo que la vista ocupa aproximadamente el mismo espacio físico en la pantalla .
Del mismo modo, se debe preferir el sp (escala independiente de píxeles) para definir tamaños de texto.

2. No utilice valores codificados de píxeles en el código de aplicación

Por cuestiones de rendimiento y mantener el código más simple, el sistema Android utiliza píxeles como unidad estándar para expresar los valores de cota o coordenada. Eso significa que las dimensiones de una vista se expresan siempre en el código mediante píxeles, pero siempre se basa en la densidad de pantalla actual. Por ejemplo, si myView.getWidth() devuelve 10, la vista es 10 píxeles de ancho en la pantalla actual, pero en un dispositivo con una pantalla de mayor densidad, el valor devuelto puede ser 15. Si utiliza valores de los píxeles en el código de aplicación para trabajar con mapas de bits que no están pre-escalados para la densidad de pantalla actual, puede que tenga que escalar los valores de los píxeles que se utilizan en el código para que coincida con la fuente de mapa de bits sin escala.
Si su aplicación manipula mapas de bits o se ocupa de los valores de píxel en tiempo de ejecución, consulte la siguiente sección sobre Consideraciones adicionales de densidad .

3. No utilice AbsoluteLayout

A diferencia de los widgets de otros diseños, AbsoluteLayout refuerza el uso de posiciones fijas para exponer sus vistas, lo que pueden llevar fácilmente a que las interfaces de usuario no funcionen bien en pantallas diferentes. Debido a esto, AbsoluteLayout está desfasada y en Android 1.5 (Nivel API 3).
En su lugar, debe utilizar RelativeLayout , que utiliza posicionamiento relativo. Por ejemplo, puede especificar que un widget de botón debe aparecer "a la derecha de" un widget de texto.

4. Use el tamaño y densidad de recursos específicos

Aunque el sistema de escalas de su diseño y recursos drawables basado en la configuración actual de la pantalla, es posible que desee realizar ajustes en la interfaz de usuario en diferentes tamaños de pantalla y proporcionar drawables que están optimizados para diferentes densidades. Esto, en esencia reitera la información de arriba en este documento.
Si necesita controlar exactamente cómo su aplicación se verá en varias configuraciones de pantalla, ajustar los diseños y drawables en directorios de recursos de configuración específicos. Por ejemplo, considere un icono que desea mostrar en las pantallas de media y alta densidad. Sólo tienes que crear tu icono en dos tamaños diferentes (por ejemplo 100x100 de densidad media y 150x150 de alta densidad) y poner las dos variaciones en los directorios adecuados, utilizando los calificadores apropiados:
res/drawable-mdpi/icon.png   //for medium-density screens
res/drawable-hdpi/icon.png   //for high-density screens
Nota: Si un calificador de densidad no está definido en un nombre de directorio, el sistema asume que los recursos en ese directorio están diseñados para la línea de base de densidad media y se escala para otras densidades, según proceda.

Cómo probar la aplicación en varias pantallas



Figura 6. Un conjunto de AVDS para probar pantallas de apoyo.
Antes de publicar su aplicación, usted debe probarlo a fondo en todos los tamaños de pantalla admitidos y densidades. El SDK de Android incluye un emulador que puede utilizar, que replican los tamaños y densidades de configuraciones de pantalla comunes en los que su aplicación es probable que se ejecute. También se puede modificar el tamaño predeterminado, la densidad y resolución del emulador para reproducir las características de cualquier pantalla específica. El uso del emulador y las configuraciones personalizadas adicionales le permite probar cualquier configuración de pantalla posible, por lo que no tiene que comprar varios dispositivos sólo para poner a prueba el soporte de su solicitud de pantalla.
Para configurar un entorno de prueba debe crear una serie de AVDS (Android Virtual Devices), utilizando el emulador y configuraciones de pantalla que emulan los tamaños de pantalla y densidades que desean. Para ello, puede utilizar el Administrador de AVD para crear las AVDS y lanzarlos con una interfaz gráfica.
Para iniciar el Administrador de Android SDK, ejecute el Manager.exe SDK de Android tu directorio SDK (sólo en Windows) o ejecutar androide de la <SDK> / tools / directorio (en todas las plataformas). La Figura 6 muestra el Administrador de AVD con una selección de AVDS, para probar varias configuraciones de pantalla.
La Tabla 3 muestra las pantallas del emulador diferentes que están disponibles en el SDK de Android, que se puede utilizar para emular algunas de las configuraciones de pantalla más comunes.
Para obtener más información acerca de cómo crear y utilizar AVDS para probar la aplicación, consulte Administración de AVDS con el Administrador de AVD .
Tabla 3. Las diferentes configuraciones de pantalla disponibles a partir de pieles emulador del SDK de Android (indicadas en negrita) y otras resoluciones representativas.
Baja densidad (120)ldpiDensidad media (160)mdpiDensidad alta (240)xhpiDensidad extra alta (320)xhdpi
Small pantallaQVGA (240x320)480x640
Normal pantallaWQVGA400 (240x400) 
WQVGA432 (240x432)
HVGA (320x480)WVGA800 (480x800) 
WVGA854 (480x854)
600x1024
640x960
Large pantallaWVGA800 ** (480x800) 
WVGA854 ** (480x854)
WVGA800 * (480x800) 
WVGA854 * (480x854)
600x1024
Extra Large pantalla1024x600WXGA (1280x800) 
1024x768
1280x768
1536x1152
1920x1152
1920x1200
2048x1536
2560x1536
2560x1600
* Para emular esta configuración, especifique una densidad de 160 personalizada al crear un AVD que utiliza una piel WVGA800 o WVGA854.
** Para emular esta configuración, especifique una densidad de 120 personalizada al crear un AVD que utiliza una piel WVGA800 o WVGA854.
† Esta piel está disponible con la plataforma Android 3.0
Para ver los números relativos de los productos activos que respaldan cualquier configuración de pantalla concreto, consulte los tamaños de pantalla y densidades de panel.

Figura 7. Tamaño y densidad opciones que puede establecer, al iniciar una AVD desde el Administrador de AVD.
También le recomendamos que pruebe la aplicación en un emulador que está configurado para ejecutarse en un tamaño físico que se ajusta a un dispositivo real. Esto hace que sea más fácil un montón de comparar los resultados de diferentes tamaños y densidades. Para ello es necesario conocer la densidad aproximada, en ppp, el monitor del ordenador (por ejemplo, un 30 "monitor Dell tiene una densidad de aproximadamente 96 ppp). Cuando se inicia una AVD desde el Administrador de AVD, se puede especificar el tamaño de la pantalla del emulador y su dpi monitor en las opciones de lanzamiento, como se muestra en la figura 7.
Si desea probar la aplicación en una pantalla que utiliza una resolución o la densidad no está soportado por las pieles incorporadas, puede crear un AVD que utiliza una resolución personalizada o densidad. Al crear el AVD desde el Administrador de AVD, especifique la resolución, en lugar de seleccionar un fondo integrado.
Si está iniciando su AVD desde la línea de comandos, puede especificar la escala para el emulador con la escala opción. Por ejemplo:
emulador - avd <avd_name>  - escala de 96 ppp
Para refinar el tamaño del emulador, en su lugar puede pasar la escala opción un número entre 0,1 y 3 que representa el factor de escala deseado.
Para obtener más información sobre la creación AVDS desde la línea de comandos, consulte Administración de AVDS desde la línea de comandos

2 comentarios:

  1. Hola, me parece una entrada muy buena sobre la problematica de los diferentes tipos de diseños en los dispositivos androids. Una cosa que no me acaba de quedar claro respecto a los cualificadores swXXXdp es, si creo las diferentes carpetas de resolucines sw320dp(moviles)....sw720dp los telefonos como el galaxy S5 en que categoria entraria?

    ResponderEliminar
  2. Esto de los tamaños me parece algo complicado. Gracias por la explicación, ya me quedo mas claro ahora.

    ResponderEliminar