Compatibilidad con la renderización en ventanas de escritorio

Las ventanas de escritorio permiten a los usuarios ejecutar varias apps simultáneamente en ventanas de apps con tamaño modificable para obtener una experiencia versátil similar a la de una computadora de escritorio.

En la figura 1, puedes ver la organización de la pantalla con la renderización en ventanas de escritorio habilitada. Información que debes tener en cuenta:

  • Los usuarios pueden ejecutar varias apps en paralelo de forma simultánea.
  • La barra de tareas está en una posición fija en la parte inferior de la pantalla y muestra las apps en ejecución. Los usuarios pueden fijar apps para acceder a ellas rápidamente.
  • La nueva barra de encabezado personalizable decora la parte superior de cada ventana con controles como minimizar y maximizar.
Figura 1: Ventanas de escritorio en una tablet.

De forma predeterminada, las apps se abren en pantalla completa en las tablets Android. Para iniciar una app en ventanas de escritorio, mantén presionado el control de la ventana en la parte superior de la pantalla y arrástralo dentro de la IU, como se muestra en la figura 2.

Cuando una app se abre en un sistema de ventanas de escritorio, otras también se abren en esas ventanas.

Figura 2: Mantén presionado el control de la ventana de la app y arrástralo para ingresar al modo de ventanas de escritorio.

Los usuarios también pueden invocar la ventana del escritorio desde el menú que aparece debajo del control de la ventana cuando presionas o haces clic en el control, o bien usan la combinación de teclas Tecla Meta (Windows, Comando o Búsqueda) + Ctrl + Abajo.

Para salir de la ventana del escritorio, los usuarios cierran todas las ventanas activas o toman el control de la ventana en la parte superior de una ventana de escritorio y arrastran la app a la parte superior de la pantalla. La combinación de teclas Meta + H también sale del sistema de ventanas de escritorio y vuelve a ejecutar las apps en pantalla completa.

Para volver a la ventana de escritorio, presiona o haz clic en la tarjeta de espacio de escritorio en la pantalla Recientes.

Modo de compatibilidad y cambio de tamaño

En la renderización en ventanas de escritorio, las apps con orientación bloqueada pueden cambiar de tamaño libremente. Esto significa que, aunque una actividad esté bloqueada en la orientación vertical, los usuarios podrán cambiar el tamaño de la app a una ventana de orientación horizontal.

Figura 3: Cambiar el tamaño de la ventana de una app con restricción vertical a horizontal

Las apps declaradas como no ajustables (es decir, resizeableActivity = false) tienen su IU ajustada mientras se mantiene la misma relación de aspecto.

Figura 4: La IU de una app que no cambia de tamaño se ajusta a medida que cambia el tamaño de la ventana.

Las apps de cámara que bloquean la orientación o se declaran como no modificables tienen un tratamiento especial para sus visores: la ventana se puede cambiar de tamaño por completo, pero el visor mantiene la misma relación de aspecto. Si supones que las apps siempre se ejecutan en modo vertical u horizontal, las apps codifican de forma rígida o hacen suposiciones que llevan a errores de cálculo de la vista previa o la orientación de la imagen capturada o la relación de aspecto, lo que genera imágenes estiradas, laterales o al revés.

Hasta que las apps estén listas para implementar visores de cámara completamente responsivos, el tratamiento especial proporciona una experiencia del usuario más básica que mitiga los efectos que pueden causar las suposiciones incorrectas.

Para obtener más información sobre el modo de compatibilidad de las apps de cámara, consulta Modo de compatibilidad del dispositivo.

Figura 5: El visor de la cámara conserva su relación de aspecto a medida que cambia el tamaño de la ventana.

Inserciones de encabezado personalizables

Todas las apps que se ejecutan en ventanas de escritorio tienen una barra de encabezado, incluso en el modo envolvente.
Asegúrate de que la barra del encabezado no oculte el contenido de tu app. La barra de encabezado es un tipo de inserción de barra de leyenda: androidx.compose.foundation.layout.WindowInsets.Companion.captionBar(); en vistas, WindowInsets.Type.captionBar(), que forma parte de las barras del sistema.

Puedes obtener más información para controlar las inserciones en Cómo mostrar el contenido de borde a borde en la app y controlar las inserciones de ventana en Compose.

La barra del encabezado también se puede personalizar. En Android 15, se introdujo el tipo de apariencia APPEARANCE_TRANSPARENT_CAPTION_BAR_BACKGROUND para hacer que la barra del encabezado sea transparente y permitir que las apps dibujen contenido personalizado dentro de ella.

Luego, las apps se vuelven responsables de aplicar diseño a la parte superior de su contenido para que se vea como la barra de leyendas (fondo, contenido personalizado, etcétera), a excepción de los elementos de la leyenda del sistema (botones para cerrar y maximizar), que el sistema dibuja en la barra de leyendas transparente en la parte superior de la app.

Las apps pueden activar o desactivar la apariencia de los elementos del sistema dentro del subtítulo de los temas claros y oscuros con APPEARANCE_LIGHT_CAPTION_BARS, de manera similar a como se activan o desactivan la barra de estado y la barra de navegación.

Android 15 también introdujo el método WindowInsets#getBoundingRects(), que permite que las apps inspeccionen los inserciones de la barra de subtítulos con más detalle. Las apps pueden diferenciar entre áreas en las que el sistema dibuja elementos del sistema y áreas no utilizadas en las que las apps pueden colocar contenido personalizado sin superponer elementos del sistema.

La lista de objetos Rect que muestra la API indica las regiones del sistema que se deben evitar. El espacio restante (que se calcula restando los rectángulos de los rellenos de la barra de subtítulos) es donde la app puede dibujar sin superponer elementos del sistema y con la capacidad de recibir entradas.

Chrome antes y después de implementar encabezados personalizados.
Figura 6: Chrome antes y después de implementar encabezados personalizados.

Compatibilidad con instancias y tareas múltiples

La realización de varias tareas a la vez es el núcleo del sistema de ventanas de escritorio, y permitir que tu app se ejecute en múltiples instancias puede aumentar considerablemente la productividad de los usuarios.

En Android 15, se introduce PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI, que se puede configurar para que las apps especifiquen que la IU del sistema debe mostrarse para que la app permita que se inicie como varias instancias.

Administra instancias de apps con gestos de arrastre

En el modo multiventana, los usuarios pueden iniciar una nueva instancia de app arrastrando un elemento de vista fuera de la ventana de la app. Los usuarios también pueden mover elementos entre instancias de la misma app.

Figura 7: Arrastra una pestaña fuera de la ventana de escritorio para iniciar una nueva instancia de Chrome.

Android 15 presenta dos marcas para personalizar el comportamiento de arrastrar y soltar:

  • DRAG_FLAG_START_INTENT_SENDER_ON_UNHANDLED_DRAG: Indica que se debe delegar un arrastre no controlado al sistema para que se inicie si ninguna ventana visible controla la acción de soltar. Cuando se usa esta marca, el llamador debe proporcionar a ClipData un Item que contenga un IntentSender inmutable a una actividad que se lanzará (consulta ClipData.Item.Builder#setIntentSender()). El sistema puede iniciar el intent o no en función de factores como el tamaño de la pantalla actual o el modo de ventana. Si el sistema no inicia el intent, este se cancela mediante el flujo normal de arrastrar y soltar.

  • DRAG_FLAG_GLOBAL_SAME_APPLICATION: Indica que una operación de arrastre puede cruzar los límites de las ventanas (para varias instancias de la misma aplicación).

    Cuando se llama a startDragAndDrop() con esta marca establecida, solo las ventanas visibles que pertenecen a la misma aplicación pueden participar en la operación de arrastre y recibir el contenido arrastrado.

Figura 8: Mover una pestaña entre dos instancias de la app de Chrome.

Optimizaciones adicionales

Personaliza los inicios de las apps y realiza la transición de las apps de la renderización en ventanas de escritorio a la pantalla completa.

Especifica el tamaño y la posición predeterminados

No todas las apps, incluso aquellas que pueden cambiar de tamaño, necesitan una ventana grande para ofrecer valor al usuario. Puedes usar el método ActivityOptions#setLaunchBounds() para especificar un tamaño y una posición predeterminados cuando se inicia una actividad.

Cómo ingresar a la pantalla completa desde el espacio de escritorio

Las apps pueden pasar a pantalla completa llamando a Activity#requestFullScreenMode(). El método muestra la pantalla completa de la app directamente desde la ventana del escritorio.