Llega la Semana Santa, pero nosotros no nos olvidamos de los desarrolladores, los que como siempre decimos consideramos activos clave en el éxito de Android como plataforma, pues lo que enriquece la plataforma es la variedad de contenido y apps.
Pero no cualquier app para ser honestos. Las apps que enriquecen una plataforma son aquellas que ofrecen una calidad aceptable a lo largo de las diferentes actualizaciones de Android que vamos a tener, y que saben adaptarse a cada dispositivo.
En esta ocasión, y con la próxima llegada de Android N, os vamos a dar alguna información para tener nuestras apps listas para Android N y su modo multiventana, si bien ya la semana pasada os adelantamos algunas herramientas para estar listos para Android N:
El soporte a lo largo de las versiones
En primer lugar, uno de los factores clave de los desarrolladores es utilizar la librería de soporte, con la cual podríamos utilizar por ejemplo novedades de Android N en versiones anteriores (y así hacia atrás):
Lo que todo desarrollador estará expectante es a ver qué novedades de Android N se verán reflejada en la próxima actualización de esta librería. Posiblemente el modo multiventana no esté disponible en versiones anteriores, pero sí que nos permitirá que el compilador entienda esta funcionalidad y la aplique en Android N.
Dando soporte para el modo multiventana
Google no terminaba de apostar por las tablets y las oportunidades que sus pantallas presentaban. Pero con Android N decidieron dar un paso al frente, añadiendo el modo multiventana:
Hasta que sepamos todas las opciones finales que incluirán en este apartado, los desarrolladores podemos ir configurando nuestra app para permitir que sea abierta en modo multiventana o sea obligatoriamente a pantalla completa.
Para ello, Google ha puesto a nuestra disposición un nuevo atributo para el fichero Manifest, con al cual permitir que una Activity (pantalla) sea lanzada en modo multiventana o no con tan sólo indicar true o false:
android:resizableActivity = boolean
Para ello, deberíamos especificar en el mismo fichero que utilizamos esa versión para compilar (no necesariamente la versión mínima donde ejecutar). En versiones anteriores, dicho atributo será ignorado.
Multiventana, ¿a cualquier tamaño?
Pero, ¿puede ser un riesgo permitir cualquier tamaño si finalmente Android permite todo tipo de ventanas? Para ello, también podemos especificar las dimensiones mínimas permitidas. De esta forma, el desarrollador tiene unas garantías mínimas de espacio en pantalla.
Para ello, encontramos atributos como:
- android:defaultWidth – Ancho por defecto cuando se abra la actividad en modo multiventana
- android:defaultHeight – Altura por defecto
- android:gravity – Posición inicial en la pantalla
- android:minimalSize – Mínimo ancho y alto permitido para la actividad
La mejor forma de entenderlos es ver un sencillo ejemplo:
En este caso vemos que la actividad se abrirá en la parte superior al final con un tamaño de 600dp x 500 dp, sin poder llegar a ser nunca inferior a 450 dp x 450 dp.
Dando soporte al modo picture-in-picture
Pero sigamos con este modo de ventanas que tanto juego puede dar. ¿Qué pasa con los televisores? Aquí podríamos ofrecer un modo Picture in Picture, pero veamos primero en qué consiste:
Picture in Picture (PiP): Característica de algunos televisores o dispositivos similares. Un canal de televisión es mostrado a pantalla completa mientras que otro es mostrado en una ventana menor. El sonido escuchado generalmente corresponde al programa principal.
Para ello bastaría utilizar otro atributo a través del mismo fichero Manifest:
android:supportsPictureInPicture = boolean
Sencillo, ¿no?
Gestionando el cambio de ventana
Además, el ciclo de vida de dichas ventanas será similar a la gestión cuando rotamos el dispositivo, por lo que no debe resultar complejo de gestionar si ya estás acostumbrado a este tipo de eventos en código. Simplemente habrá que gestionar nuevos eventos disponibles desde Android N, para los que tendremos nuevos métodos accesibles:
- Activity.inMultiWindow() – Nos permite comprobar si estamos en multiventana
- Activity.inPictureInPicture() – Pos permite comprobar si estamos en modo PiP (siendo éste un modo específico de multiventana)
- Activity.onMultiWindowChanged() – Método que es lanzado cada vez que entremos o salgamos del modo multiventana
- Activity.onPictureInPictureChanged() – Similar al anterior, pero aplicado a PiP
- Fragment.inMultiWindow() – Nos permite comprobar desde un Fragmento si éste está en una actividad en modo multiventana.
De esta forma, podríamos incluso gestionar cómo mostrar el contenido basándonos en si es un modo u otro para optimizar la experiencia de uso. Para más información, no dudes en leer la documentación oficial.
Compartiendo datos entre ventanas
Una vez gestionados los principales aspectos de dicho modo, podríamos extender su uso gracias a las posibilidades que ofrece Android N. Concretamente, podríamos compartir datos de una actividad a otra mientras comparten la pantalla con el gesto de seleccionar y arrastar con el dedo.
Para ello, tendríamos las siguientes clases y métodos disponibles:
android.view.DropPermissions – Nos permite especificar los permisos para compartir
View.startDragAndDrop() – Este método será llamado al iniciar el proceso
View.cancelDragAndDrop() – Este método será llamado si cancelamos el proceso en cualquier momento antes de terminar
View.updateDragShadow() – Nos permite reemplazar la sombra que vemos por una operación en sí
Activity.requestDropPermissions() – Pide permiso para acceder al contenido a compartir
El éxito del modo multiventana: su buena implementación
Par finalizar nos gustaría resaltar 5 consejos que debemos tener en cuenta para que el modo multiventana tenga una buena implementación. Si los respetamos, no deberíamos tener problema en la experiencia de uso del modo multiventana:
- Usar el Contexto correcto en cada ventana
- Gestionar los cambios de configuración correctamente
- Administrar todas las orientaciones
- Construir una interfaz gráfica para todos los tamaños de pantalla
- Todas las Activity que puedan abrirse de forma externa a nuestra app deberían permitir modo multiventana
Tras eso, la mejor manera de tener la mejor implementación posible es, como siempre recomendamos, leer la documentación oficial para más detalles. Además, también podréis encontrar información sobre cómo testear toda esta funcionalidad:
A partir de ahí, cuando llegue Android N a los móviles, si tu app no está lista para este modo, no será porque no estaba la información disponible y teníamos tiempo de reacción. Así que, ¿a qué esperas a actualizar tu app?