page.title=Compatibilidad con ventanas múltiples page.metaDescription=Nueva compatibilidad en Android N para mostrar más de una aplicación a la vez. page.keywords="multi-window", "android N", "split screen", "free-form" @jd:body
Android N agrega compatibilidad con la visualización de más de una aplicación a la vez. En dispositivos portátiles, se pueden ejecutar dos aplicaciones una al lado de la otra o una por encima de la otra en modo de pantalla dividida. En dispositivos de TV, las aplicaciones pueden usar el modo picture-in-picture para continuar la reproducción de video mientras los usuarios interactúan con otra aplicación.
Si compilas tu aplicación con el N Preview SDK, puedes configurar la manera en que tu aplicación administra la visualización de ventanas múltiples. Por ejemplo, puedes especificar las dimensiones mínimas permitidas de tu actividad. También puedes inhabilitar la visualización de ventanas múltiples para tu aplicación asegurándote de que el sistema solo muestre tu aplicación en modo de pantalla completa.
Android N permite que varias aplicaciones compartan la pantalla al mismo tiempo. Por ejemplo, un usuario podría dividir la pantalla y ver una página web a la izquierda mientras escribe un correo electrónico a la derecha. La experiencia de usuario depende del dispositivo:
El usuario puede cambiar a modo de ventanas múltiples de la siguiente manera:
Los usuarios pueden arrastrar y soltar datos de una actividad a otra mientras las actividades comparten la pantalla. (Antes, los usuarios solo podían arrastrar y soltar datos dentro de una sola actividad).
El modo de ventanas múltiples no cambia el ciclo de vida de la actividad.
En modo de ventanas múltiples, solo la actividad con la que el usuario interactuó más recientemente está activa en un momento determinado. Esa actividad se considera la principal. Todas las demás actividades están pausadas, aunque estén visibles. No obstante, el sistema les da a esas actividades pausadas pero visibles una prioridad más alta que las actividades que no están visibles. Si el usuario interactúa con una de las actividades pausadas, se reanuda esa actividad y se pausa la actividad que antes era la principal.
Nota: En modo de ventanas múltiples, una aplicación puede estar pausada y aún visible para el usuario. Es posible que una aplicación necesite continuar sus actividades mientras está pausada. Por ejemplo, una aplicación de reproducción de video que está pausada pero visible debería continuar mostrando el video. Por ese motivo, recomendamos que las actividades que reproducen video no pausen el video en sus controladores{@link android.app.Activity#onPause onPause()}. En su lugar, deben pausar el video en {@link android.app.Activity#onStop onStop()} y reanudar la reproducción en {@link android.app.Activity#onStart onStart()}.
Cuando el usuario coloca una aplicación en modo de ventanas múltiples, el sistema le notifica a la actividad de un cambio de configuración, tal como se especifica en Control de cambios en tiempo de ejecución. Esto también sucede cuando el usuario modifica el tamaño de la aplicación o coloca la aplicación nuevamente en el modo de pantalla completa. Básicamente, este cambio tiene las mismas consecuencias en el ciclo de vida de la actividad que cuando el sistema notifica a la aplicación que el dispositivo cambió de modo vertical a modo de paisaje, excepto porque se modifican las dimensiones del dispositivo en lugar de intercambiarse solamente. Como se aborda en Control de cambios en tiempo de ejecución, tu actividad puede administrar el cambio de configuración por sí misma, o puede permitir que el sistema destruya la actividad y la vuelva a crear con las nuevas dimensiones.
Si el usuario cambia el tamaño de una ventana y la agranda en cualquier dirección, el
sistema modifica el tamaño de la actividad para que coincida con la acción del usuario y emite cambios en tiempo de ejecución
según sean necesarios. Si la aplicación se retrasa en el trazado de áreas recientemente expuestas, el
sistema rellena esas áreas con el color especificado por el atributo {@link
android.R.attr#windowBackground windowBackground} o por el atributo de estilo predeterminado
windowBackgroundFallback
.
Si tu aplicación está orientada a Android N, puedes configurar cómo y
si quieres que las actividades de tu aplicación admitan la visualización de ventanas múltiples. Puedes establecer
atributos en tu manifiesto para controlar el tamaño y el diseño.
La configuración de atributos de una actividad raíz se aplica a todas las actividades
de su pila de tareas. Por ejemplo, si
android:resizeableActivity
está configurado en true para la actividad raíz, se puede modificar el tamaño de todas las actividades
de la pila de tareas.
Nota: Si compilas una aplicación con múltiples orientaciones con una versión del SDK anterior a Android N, y el usuario usa la aplicación en modo de ventanas múltiples, el sistema cambia el tamaño de la aplicación de forma forzada. El sistema presenta un cuadro de diálogo en el que se advierte al usuario que la aplicación puede comportarse de forma inesperada. El sistema no modifica el tamaño de aplicaciones con orientación fija; si el usuario intenta abrir una aplicación con orientación fija en modo de ventanas múltiples, la aplicación ocupará toda la pantalla.
Establece este atributo en el nodo <activity>
o
<application>
de tu manifiesto para habilitar o inhabilitar la visualización
en modo de ventanas múltiples:
android:resizeableActivity=["true" | "false"]
Si este atributo se establece en true, la actividad puede iniciarse en los modos de pantalla dividida y forma libre. Si el atributo se establece en false, la actividad no admite el modo de ventanas múltiples. Si el valor es false, y el usuario intenta iniciar la actividad en modo de ventanas múltiples, la actividad ocupará toda la pantalla.
Si tu aplicación está orientada a Android N, pero no especificas un valor para este atributo, el valor predeterminado del atributo será true.
Establece este atributo en el nodo <activity>
de tu manifiesto
para indicar si la actividad admite la visualización de Picture-in-picture. Este
atributo se ignora si android:resizeableActivity
es false.
android:supportsPictureInPicture=["true" | "false"]
Con Android N, el elemento de manifiesto <layout>
admite varios atributos que afectan cómo se comporta una actividad en
modo de ventanas múltiples:
android:defaultWidth
android:defaultHeight
android:gravity
android:minimalHeight
, android:minimalWidth
Por ejemplo, el siguiente código muestra cómo especificar el tamaño y la ubicación predeterminados de una actividad, y su tamaño mínimo, cuando la actividad se visualiza en modo de forma libre:
<activity android:name=".MyActivity"> <layout android:defaultHeight="500dp" android:defaultWidth="600dp" android:gravity="top|end" android:minimalHeight="450dp" android:minimalWidth="300dp" /> </activity>
Android N ofrece nuevas funcionalidades para admitir aplicaciones que puedan ejecutarse en modo de ventanas múltiples.
Ciertas funciones están deshabilitadas o se ignoran cuando un dispositivo se encuentra en modo de ventanas múltiples, ya que no resultan útiles para una actividad que podría estar compartiendo la pantalla del dispositivo con otras actividades o aplicaciones. Esas funciones incluyen las siguientes:
android:screenOrientation
.
Se agregaron los siguientes métodos nuevos a la clase {@link android.app.Activity} para admitir la visualización de ventanas múltiples. Para obtener información detallada sobre cada método, consulta la Referencia sobre N Preview SDK .
Activity.isInMultiWindowMode()
Activity.isInPictureInPictureMode()
Nota: El modo Picture-in-picture es un caso especial del
modo de ventanas múltiples. Si myActivity.isInPictureInPictureMode()
devuelve un valor true, myActivity.isInMultiWindowMode()
también
devuelve un valor true.
Activity.onMultiWindowModeChanged()
Activity.onPictureInPictureModeChanged()
También hay versiones {@link android.app.Fragment} de cada uno de esos
métodos; por ejemplo, Fragment.isInMultiWindowMode()
.
Para que una actividad entre en modo de Picture-in-picture, debes llamar al nuevo método
Activity.enterPictureInPictureMode()
. Este método no tiene efecto si
el dispositivo no admite el modo de imagen en imagen. Para obtener más información,
consulta la documentación de Picture-in-Picture.
Cuando inicias una nueva actividad, puedes indicarle al sistema que la nueva
actividad se debe mostrar adyacente a la actual, si fuera posible. Para hacer
esto, usa el marcador
Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT
. Pasar
este marcador requiere el siguiente comportamiento:
Si un dispositivo está en modo de forma libre e inicias una nueva actividad, puedes
especificar las dimensiones y la ubicación de la pantalla de la nueva actividad al llamar a
ActivityOptions.setLaunchBounds()
. Este método no tiene efecto si
el dispositivo no está en modo de ventanas múltiples.
Nota: Si inicias una actividad en una pila de tareas, esa actividad reemplaza la actividad en pantalla y hereda todas sus propiedades de ventanas múltiples. Si quieres iniciar la nueva actividad en una ventana independiente en modo de ventanas múltiples, debes iniciarla en una nueva pila de tareas.
Los usuarios pueden arrastrar y soltar datos de una actividad a otra mientras las dos actividades comparten la pantalla. (Antes, los usuarios solo podían arrastrar y soltar datos dentro de una sola actividad). Por este motivo, te recomendamos que agregues la funcionalidad de arrastrar y soltar a tu aplicación si es que aún no la admite.
El N Preview SDK amplía el paquete android.view
para admitir la funcionalidad de arrastrar y soltar entre aplicaciones diferentes. Para obtener información detallada sobre las siguientes
clase y métodos, consulta la Referencia
del N Preview SDK.
android.view.DropPermissions
View.startDragAndDrop()
View.DRAG_FLAG_GLOBAL
. Si necesitas otorgar permisos de URI a
la actividad receptora, pasa los nuevos marcadores
View.DRAG_FLAG_GLOBAL_URI_READ
o
View.DRAG_FLAG_GLOBAL_URI_WRITE
, según corresponda.
View.cancelDragAndDrop()
View.updateDragShadow()
Activity.requestDropPermissions()
Ya sea que actualices o no tu aplicación para Android N, debes verificar la forma en que se comporta en modo de ventanas múltiples en caso de que un usuario intente iniciarla en modo de ventanas múltiples en un dispositivo con Android N.
Si instalas Android N en un dispositivo, se admite automáticamente el modo de pantalla dividida.
Si no creaste tu aplicación con el N Preview SDK y el usuario intenta usar la aplicación en modo de ventanas múltiples, el sistema cambia el tamaño de la aplicación de forma forzada, a menos que la aplicación declare una orientación fija.
Si tu aplicación no declara una orientación fija, debes iniciar tu aplicación en un dispositivo con Android N e intentar colocar la aplicación en modo de pantalla dividida. Cuando se modifique el tamaño de la aplicación de forma forzada, verifica que la experiencia de usuario sea aceptable.
Si la aplicación declara una orientación fija, debes intentar colocar la aplicación en modo de ventanas múltiples. Cuando lo hagas, verifica que la aplicación continúe en modo de pantalla completa.
Si compilaste tu aplicación con el N Preview SDK y no deshabilitaste la compatibilidad con ventanas múltiples, verifica el siguiente comportamiento tanto en modo de pantalla dividida como en modo de forma libre.
Para verificar el rendimiento de tu aplicación en modo de ventanas múltiples, intenta las siguientes operaciones. Debes probar estas operaciones tanto en modo de pantalla dividida como en modo de ventanas múltiples, excepto cuando se indique algo diferente.
Si deshabilitaste la compatibilidad con el modo de ventanas múltiples al configurar
android:resizableActivity="false"
, debes iniciar tu aplicación en
un dispositivo con Android N e intentar colocar la aplicación en los
modos de forma libre y pantalla dividida. Cuando lo hagas, verifica que la aplicación
continúe en modo de pantalla completa.