Jetpack Compose para XR

Crea de forma declarativa diseños de la IU espaciales que aprovechen las capacidades espaciales de Android XR.
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
21 de octubre de 2026 - - 1.0.0-beta02 -

Cómo declarar dependencias

Para agregar una dependencia en XR Compose, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.

Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:

Groovy

dependencies {
    implementation "androidx.xr.compose:compose:1.0.0-beta02"

    // Use to write unit tests
    testImplementation "androidx.xr.compose:compose-testing:1.0.0-beta02"
}

Kotlin

dependencies {
    implementation("androidx.xr.compose:compose:1.0.0-beta02")

    // Use to write unit tests
    testImplementation("androidx.xr.compose:compose-testing:1.0.0-beta02")
}

Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.

Crear un error nuevo

Consulta la documentación sobre la herramienta Issue Tracker para obtener más información.

Versión 1.0

Versión 1.0.0-beta02

21 de octubre de 2026

Lanzamiento de androidx.xr.compose:compose:1.0.0-beta02 y androidx.xr.compose:compose-testing:1.0.0-beta02. La versión 1.0.0-beta02 incluye estas confirmaciones.

Cambios en la API

  • Las bibliotecas ahora se orientan a Kotlin 2.2 y requieren kotlinc 2.2 (I82396, b/498369605)
  • Se cambió el nombre del parámetro halfLifeMs de FollowMode.soft() a halfLifeMillis. (I39187)
  • Se convirtió PitchLimits en un @JvmInline value class que empaqueta dos números de punto flotante en un Long para eliminar las asignaciones de objetos. (Id43c3).
  • Se agregaron parámetros nuevos para FollowMode.soft: halfLifeMs, startDelay y startThresholds. Se quitó el parámetro durationMs, ya que no es necesario, dado que pasamos de un algoritmo smoothStep a un algoritmo exponentialDecay. (If0140).
  • Se quitó la sobrecarga obsoleta de SpatialActivityPanel. En su lugar, usa la sobrecarga de SpatialActivityPanel que acepta un SpatialActivityPanelController. (I5abc3).
  • Habilita las transiciones entre el contenido de Composable en 3D y 2D dentro de una actividad en FullSpaceMode. Este cambio está restringido por SpatialComposeFlags.isMainPanelResetOnSubspaceDisposeEnabled. (I4e237)
  • Se expuso la sobrecarga experimental de Subspace que toma un parámetro FollowTarget para admitir el contenido siguiente. (Iec1a9)
  • Se quitaron los modificadores móviles obsoletos. En su lugar, usa el nuevo modificador movable que acepta el nuevo MovePolicy como parámetro. (Ib135d)
  • Se quitó DragPolicy, que estaba obsoleto. Usa SubspaceModifier.movable() en su lugar. (I108d4)
  • Se dieron de baja las sobrecargas sin estado de Slider y RangeSlider en favor de sus versiones con estado. Se cambió el nombre de activeRangeStart y activeRangeEnd en RangeSliderState a startValue y endValue, y se dieron de baja las APIs de Slider experimentales y no promocionadas más antiguas con DeprecationLevel.HIDDEN. (If8995)

Correcciones de errores

  • Se corrigió RotateToLookAtUser con la introducción de poseInActivitySpace para garantizar el cálculo correcto de la pose para todos los tipos de subespacios, incluidos los adjuntos a anclas o usuarios.Ica367b
  • Se corrigió la falla de restricciones que se producía cuando Orbiter se conectaba a paneles grandes (I8c4bf).
  • Se corrigió un error en SubspaceLayoutNode por el que removeAll() causaba asignaciones de ArrayList innecesarias. También se corrigió el rendimiento del cálculo de profundidad. I34a10a
  • Se actualizó la dependencia androidx.lifecycle:lifecycle-runtime a la versión 2.10.0. Esta versión es necesaria para que las verificaciones de lint del entorno de ejecución del ciclo de vida empaquetado se ejecuten con la versión 9.5.0-alpha04 o posterior del AGP. (I99bfd, b/556807521)
  • Se mejoraron los kdocs relacionados con AudioOutputProvider para destacar que no se debe volver a usar con varias instancias de ExoPlayer (I6b18e).
  • Se corrigieron problemas menores de ortografía y gramática de kdoc (Id3ba6).

Errores conocidos

  • Esta versión de androidx.xr.compose tiene una dependencia de androidx.xr.scenecore:1.0.0-rc01, que tiene una fuga de memoria conocida. En tu configuración de compilación, puedes anular de forma explícita la dependencia SceneCore a la versión 1.0.0, que incluye una corrección para la fuga de memoria.

Versión 1.0.0-beta01

23 de septiembre de 2026

Lanzamiento de androidx.xr.compose:compose:1.0.0-beta01 y androidx.xr.compose:compose-testing:1.0.0-beta01. La versión 1.0.0-beta01 contiene estas confirmaciones.

Cambios en la API

  • Se quitó DragPolicy, que ya no se usa. Usa SubspaceModifier.movable() en su lugar. (I108d4)
  • Se quitó el ResizePolicy obsoleto y sus usos en SpatialPanel y SpatialExternalSurface. Se quitó una función SubspaceModifier.resizable obsoleta. En su lugar, usa el nuevo SubspaceModifier.resizable con un nuevo ResizePolicy. (I59e6b)
  • Se agregó el parámetro isPitchUpdateEnabled para permitir habilitar o inhabilitar el seguimiento de tono de forma independiente. (Ie9e86)
  • Se quitó la nulabilidad de pitchLimits y se cambió el nombre de PitchLimits.UNCONSTRAINED a PitchLimits.FullRange. (I0154f).
  • ExposedDropdownMenu ahora es una función de extensión en ExposedDropdownMenuBoxScope en lugar de un miembro. Es posible que debas actualizar tu código con una importación nueva. (Ie8a65).
  • Se quitó la clase obsoleta SurfaceProtection. Usa SpatialExternalSurfaceProtection en su lugar. (Iab2c6)
  • La función Orbiter que toma un OrbiterPoseProvider dejó de estar disponible y se reemplazó por la que usa SpatialAlignment. (I4d12b)
  • SpatialActivityPanel ahora requiere un SpatialActivityPanelController (con una instancia creada con rememberSpatialActivityPanelController) para iniciar y administrar actividades incorporadas. (Id25c6).
  • Se quitó el parámetro upDirection de rotateToLookAtUser y se agregaron parámetros de restricciones de rotación (isYawUpdateEnabled y pitchLimits). (I1370a)

Correcciones de errores

  • Se corrigieron varios problemas de InteractionPolicy. Se producía una falla si se generaba un evento de entrada justo cuando el elemento componible o secundario (por ejemplo, un Orbiter) iniciaba una secuencia de eliminación. También se solucionó un problema por el que un elemento secundario recibía eventos de desplazamiento. (Ifc477)
  • Se redujo el tamaño del panel en RotateToLookAtUserActivity para evitar el recorte en dispositivos con un campo de visión más pequeño. (I8d672).

Errores conocidos

  • Hay un problema con los paneles de Compose XR en el que la creación de muchos paneles en una sola actividad puede causar daños en lo que se ve, incluso después de que se destruyen los paneles.

Versión 1.0.0-alpha17

12 de agosto de 2026

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha17 y androidx.xr.compose:compose-testing:1.0.0-alpha17. La versión 1.0.0-alpha17 incluye estas confirmaciones.

Cambios en la API

  • Quita la clase de valor Meter, que se reemplaza por virtualPixelDensity en Scenecore. (I690ee)
  • La API de SpatialGltfModel ahora es experimental y se debe habilitar para su uso. (I4557e).
  • Se hizo que system sea anulable y se pueda cambiar de tamaño (Ib0093).
  • Se expuso Density en SubspaceSemanticsInfo para realizar pruebas. (I2e826)
  • Se cambió el nombre de la opción predeterminada ResizePolicy a system y se agregó una nueva opción Default sin parámetros (Ic8b16).
  • Se marcó FollowTarget como experimental. Toda la API de FollowingSubspace ahora es experimental. (Id4ee3)
  • Se quitaron las APIs de GltfAnimation (Ic2894).
  • Se cambió el nombre del método MovePolicy.default() con parámetros a MovePolicy.system(). Se introdujo una propiedad val MovePolicy.Default para representar el comportamiento de movimiento predeterminado estándar. (Iedcc9)
  • Se expandieron los requisitos de habilitación de ExperimentalMoveAnchorPolicy a PlaneSemantic y PlaneOrientation (Ief927).
  • Se quitó resetMins de VolumeConstraints.offset (Ib2f2f).
  • Se quitó la función SceneCoreEntitySizeAdapter obsoleta. (Ib6722).
  • Se quitó la sobrecarga obsoleta de Subspace con allowUnboundedSubspace. (I8e97f).
  • Se quitó la sobrecarga del modificador de semántica obsoleta. (I4ac10)

Correcciones de errores

  • Se corrigió un problema por el que los elementos secundarios de un Composable con un InteractionPolicy adjunto activaban eventos de entrada (Icdba6).

Versión 1.0.0-alpha16

15 de julio de 2026

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha16 y androidx.xr.compose:compose-testing:1.0.0-alpha16. La versión 1.0.0-alpha16 incluye estas confirmaciones.

Cambios en la API

  • Se quitaron las APIs de ComponentOverride (I820c4).
  • Las APIs de GltfAnimation y SpatialGltfModelAnimation se marcaron como experimentales. Algunas propiedades se convirtieron en métodos get. (I8d689, b/524771027)
  • Se corrigió el comportamiento de la densidad general estableciendo que la conversión entre metros y píxeles sea constante. Se dio de baja Meter.kt, por lo que ahora se puede usar Session.scene.virtualPixelDensity como alternativa. (I122ff, b/430097855, b/474168798)
  • Se actualizó el modificador de cambio de tamaño para usar un ResizePolicy en lugar de dos modificadores (I7fb0f, b/496257436, b/519672992).
  • Se agregó un parámetro de tolerancia Dp = Dp(0.5f) a todas las aserciones de igualdad de posición y dimensión de punto flotante públicas en SubspaceAssertions.kt. El comportamiento de tolerancia predeterminado (0.5.dp) está completamente documentado. (I266cb, b/521491915)
  • Se agregó una sobrecarga móvil con el parámetro movePolicy y se marcaron como obsoletos transformingMovable y movable (Ic88c1, b/481781189).
  • Se agregaron nuevas variantes no interactivas de elementos de lista estándar y elementos de lista segmentados que siguen las especificaciones de Material Expressive. La versión no expresiva dejó de estar disponible. (Ide4de, b/491994186)
  • En Subspace, el parámetro allowUnboundedSubspace ahora está obsoleto y oculto. Ahora, el comportamiento sin límites se debe lograr usando SubspaceModifier.requiredSizeIn(maxWidth = Dp.Infinity, maxHeight = Dp.Infinity, maxDepth = Dp.Infinity) en el modificador Subspace. Se quitó el parámetro allowUnboundedSubspace de FollowingSubspace. (Ia72ae, b/433624021)
  • Se convirtió Session.create en una función de suspensión. (I5d27f).
  • Se agregó SubspaceModifier.spatializedAudioOutput, que permite espacializar la reproducción de audio a través de ExoPlayer o de un SoundEffectPlayer (I46697, b/489421980, b/497867019).
  • Se actualizaron ComponentActivity.requestHomeSpace() y requestFullSpace() para que devuelvan SpaceRequestResult para la verificación de estado. (If1672).
  • Se actualizó AnchorEntity para que se llame AnchorSpace (Ifa95e, b/513619219).
  • Se quitó la restricción del método fromResource de SpatialGltfModelSource (I1f5a1, b/503047416).
  • Los miembros de SubspaceSemanticsMatcher son públicos: la propiedad description, los métodos de fábrica complementarios (expectValue, keyIsDefined, keyNotDefined), las funciones de miembro (matches, matchesAny) y los operadores (and, or, not). (I972a4, b/460427288)
  • Se actualizaron SubspaceModifier.semantics, SubspaceModifier.testTag, SubspaceSemanticsInfo y SubspaceSemanticsModifierNode para usar tipos de semántica espacial seleccionados. (I80dea, b/460427288)
  • Se cambió el nombre de position a align en SpatialAlignment y se quitaron los métodos de desplazamiento direccional individuales para priorizar una API de align unificada. (I9bdb2, b/479805937)
  • Se quitaron las APIs obsoletas de Space Mode de SpatialConfiguration. (I1ef5c, b/458712461)
  • Se introdujo SubspaceSemanticsConfiguration. Esta es una configuración de propiedades de semántica para un nodo Spatial. Esta clase expone de forma segura métodos de consulta para la semántica 3D sin filtrar las capacidades semánticas 2D fundamentales a los consumidores externos. (Id025e, b/460427288)
  • Se introdujo SubspaceSemanticsPropertyReceiver: un wrapper dedicado que limita las propiedades del contenedor de diseño 3D a campos válidos (inicialmente, testTag y contentDescription). (I5cf5c, b/460427288)

Correcciones de errores

  • Se actualizó el hasContentDescription del modificador semántico para que use la coincidencia de subcadena de forma predeterminada. (I08214)
  • Se agregó FollowBehavior.ExponentialDecay() restringido, que proporciona un comportamiento de seguimiento suave guiado por la física elástica. (I7449c, b/485639909, b/500493335)

La mayoría de las APIs se verán afectadas por este cambio. Específicamente, LocalSession CompositionLocal y todos los CompositionLocals que dependen de LocalSession (p.ej., LocalSpatialConfiguration, LocalSpatialCapabilities, etc.) ahora se resolverán en null o sus versiones que no son de XR antes de que se inicialice Session.

Una vez que el Session esté disponible, se activará la recomposición con el estado correcto. (I0cfa4, b/514712835, b/514712835)

  • Se aclaró la documentación de ComponentActivity.requestHomeSpace y ComponentActivity.requestFullSpace en relación con el comportamiento de suspensión, la cancelación y la simultaneidad. Se actualizaron las pruebas para verificar la propagación de CancellationException. (I22f75, b/493289528)

Versión 1.0.0-alpha15

17 de junio de 2026

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha15 y androidx.xr.compose:compose-testing:1.0.0-alpha15. La versión 1.0.0-alpha15 incluye estas confirmaciones.

Cambios en la API

  • Se dio de baja ResizePolicy y el modificador de cambio de tamaño anterior, y se reemplazó por una nueva sobrecarga de SubspaceModifier.resizable y SubspaceModifier.transformingResizable. (I9e4bc)
  • Se actualizaron las APIs de SpatialGltfModel: Se agregó compatibilidad para cargar modelos desde recursos a través de SpatialGltfModelSource.fromResource. Se cambió el nombre de speed a playbackSpeed en SpatialGltfModelAnimation y se agregó un método resume(). SpatialGltfModelStatus.Loaded y Loading ahora son objetos. (I523de)
  • Se marcó rotateToLookAtUser como una API experimental. (I86c16).
  • Se movió y se cambió el nombre de la variable protegida targetCurrentPose a la variable local currentTargetPoseMeter. (Ia557c)
  • Se actualizaron los kdocs de SpatialPanel y SpatialExternalSurface para incluir dónde se renderiza el objeto dentro de su tamaño de diseño (I72104).
  • Se encapsuló la lógica de carga de SpatialGltfModel dentro de SpatialGltfModelState y se aclaró el comportamiento de falla. (Ibe98b)
  • Se aclaró depth en los kdocs de SubspaceModifer.size (I0f84f).

Versión 1.0.0-alpha14

19 de mayo de 2026

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha14 y androidx.xr.compose:compose-testing:1.0.0-alpha14. La versión 1.0.0-alpha14 incluye estas confirmaciones.

Cambios en la API

  • Se introdujo transformingMovable para el movimiento 3D predeterminado controlado por el sistema y se introdujo una nueva sobrecarga para movable para controlar los comportamientos de movimiento personalizados. (I50960)
  • SpatialGltfModel.fromData() se quitó. (I4d083)
  • Se agregó una nueva interfaz de nodo modificador, SubspaceMeasuredSizeAwareModifierNode, que proporciona una devolución de llamada onRemeasured después del pase de medición. SubspaceLayoutAwareModifierNode ahora extiende esta nueva interfaz. Se actualizó el modificador onSizeChanged para usar onRemeasured, lo que garantiza que la devolución de llamada se active justo después de la medición, no después de la ubicación. (Iafbae).
  • Se actualizó InteractionPolicy a Interface (I0ff30).
  • Se actualizó Compose compileSdk a la API 37. Esto significa que se requiere una versión mínima de AGP de 9.2.0 cuando se usa Compose. (Id45cd)
  • Se actualizaron los kdocs de Size (Iefa9a).

Versión 1.0.0-alpha13

6 de mayo de 2026

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha13 y androidx.xr.compose:compose-testing:1.0.0-alpha13. La versión 1.0.0-alpha13 incluye estas confirmaciones.

Cambios en la API

  • La API de Orbiter está pendiente de cambios adicionales, por lo que recomendamos suprimir los avisos de baja de Orbiters y estar atentos a los cambios de Orbiter en las próximas versiones.
  • Quienes usen SceneCoreEntity para renderizar glTF deben asegurarse de pasar session.scene.activitySpace al parámetro parent de su llamada a GltfModel.create para garantizar que se rendericen sus glTF.
  • Se agregó la API de SpatialGltfModel para permitir que los desarrolladores agreguen Gltf a sus apps de Compose para XR. Los desarrolladores también pueden consultar animaciones y nodos dentro de sus modelos de Gltf. (I8b542, b/495422586)
  • Se cambió SceneCoreEntitySizeAdapter de clase a interfaz (I5a784, b/475292310).
  • Se cambió el nombre de SurfaceProtection a SpatialExternalSurfaceProtection. Se actualizaron los kdocs de SpatialExternalSurface (Ifad0a, b/485231082).
  • Se dio de baja currentWindowAdaptiveInfo y se introdujo la versión 2 (I40ecf, b/424442112).
  • El modificador resizable ahora es público y se puede aplicar a grupos (p.ej., SpatialRow). (I2bcf6, b/348483527, b/489753178, b/479530787)
  • El modificador movable ahora es público. Este modificador funciona bien, en este momento, para SpatialPanels y SpatialExternalSurface. Sin embargo, la intención es que sean compatibles con todos los SubspaceComposables. (I9a3cd, b/479530787, b/478935063, b/478935063)
  • Se marcaron SpatialEnterTransition y SpatialExitTransition como @Immutable (If1710, b/487757837).
  • La API de SpatialGltfModel se marca como restringida para esta versión, ya que se deben realizar pruebas adicionales. (Ibf003, b/466090694)
  • Se cambió el nombre de DeviceTrackingMode.LAST_KNOWN a SPATIAL_LAST_KNOWN (con un resguardo obsoleto), se agregó INERTIAL_LAST_KNOWN para el seguimiento de 3DoF y se agregó TRACKING_DEGRADED a TrackingState. (Ie661c, b/445466590)
  • Se quitó el objeto SpatialLayoutSpacer obsoleto (I7b36c).
  • Se quitó la API de padding obsoleta (If1886).
  • Se agregó floatRange a los valores de sesgo. Se quitó el valor predeterminado de LayoutDirection (I9d74e).

Correcciones de errores

  • Se agregaron muestras de código y documentación de KDoc para SpatialColumn, SpatialRow y SpatialCurvedRow. (Iaf54f, b/495777633)

Versión 1.0.0-alpha12

25 de marzo de 2026

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha12 y androidx.xr.compose:compose-testing:1.0.0-alpha12. La versión 1.0.0-alpha12 contiene estas confirmaciones.

Cambios en la API

  • Agrega la API de SpatialGltfModel y las APIs de SpatialGltfModelAnimation para renderizar glTF y controlar animaciones. Se cambió SpatialGltfModelState a AutoCloseable. Ahora, se deberá cerrar para liberar sus recursos. (I11fde, b/466065486, b/481379924). Sin embargo, la API de SpatialGltfModel se marca como restringida para esta versión, ya que se deben realizar pruebas adicionales. (Ibf003, b/466090694)
  • Se agregó una sobrecarga vacía obsoleta para SubspaceModifier.rotate. (Idceb6).
  • Se cambió el nombre de la función SpatialSmoothFeatheringEffect a spatialSmoothFeatheringEffect y se movió a un módulo de dibujo. Se actualizó el valor predeterminado de difuminado de SpatialExternalSurface a nulo, lo que imita la antigua funcionalidad de ZeroFeatheringEffect. (I5fdaa, b/460426800)
  • Se quitó onPointSourceParamsAvailable. En un futuro cercano, estará disponible una API de espacialización de audio diferente. (I86507, b/458513439)
  • Se agregó el comportamiento de lectura de derecha a izquierda para los modificadores de subespacio de desplazamiento. También se agregó absoluteOffset para ignorar la dirección del diseño. (I30e4b, b/474409165)

Versión 1.0.0-alpha11

25 de febrero de 2026

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha11 y androidx.xr.compose:compose-testing:1.0.0-alpha11. La versión 1.0.0-alpha11 incluye estas confirmaciones.

Nuevas funciones

  • Se agregó el parámetro SuperSampling a SpatialExternalSurfaces (Icd4d1).

Errores conocidos

  • Un problema con SurfaceEntity en SceneCore puede provocar que las apps fallen cuando se crean instancias de SpatialExternalSurface. Este problema se resolvió en androidx.xr.scenecore:scenecore-*:1.0.0-alpha13, androidx.xr.compose:compose:1.0.0-alpha12 y sus versiones posteriores. Las apps afectadas deben actualizarse a las versiones más recientes.

Cambios en la API

  • Se realizaron cambios en el padding del modificador de Subspace para que tenga en cuenta la dirección del diseño. (I53e25)
  • SpatialCapabilities ahora está sellado y no se puede extender. (I07aef).
  • Las APIs de SpatialRow y SpatialColumn que aceptan un parámetro genérico SpatialAlignment dejaron de estar disponibles. En su lugar, usa las APIs que aceptan verticalAlignment o horizontalAlignment para SpatialRow y SpatialColumn, respectivamente. (Iec390).
  • Se combinaron las APIs de funciones SubspaceLayout sobrecargadas (Idd30a).
  • Se cambió el nombre de SubspaceModifier.lookAtUser por rotateToLookAtUser y el del parámetro up por upDirection. (Icafb8)
  • Se convirtió SpatialRow en una función intercalada (Ia2f20).
  • Se convirtió SpatialColumn en una función intercalada (I681be).
  • Se quitó la API de cartelera (Ib76cd).

Versión 1.0.0-alpha10

28 de enero de 2026

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha10 y androidx.xr.compose:compose-testing:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.

Cambios en la API

  • Se quitó la API obsoleta ApplicationSubspace (Ia6596, b/468345186).
  • Se actualizó SpatialShape a una interfaz sellada (I7e3f5, b/460426800).
  • Se quitarán las APIs obsoletas en SpatialAlignment. (Ib0b61, b/468011887)
  • Se dio de baja SpatialLayoutSpacer y se introdujo SpatialSpacer. (I2ebf3, b/466071383)
  • Se actualizó la API de UserSubspace para reemplazar la terminología de "bloqueo diferido" por "bloqueo parcial". (I9ded1, b/464035984)

Versión 1.0.0-alpha09

3 de diciembre de 2025

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha09 y androidx.xr.compose:compose-testing:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron los modificadores LookAtUser y Billboard, que permiten que el contenido siempre esté orientado hacia el usuario. (I49b99)
  • Se agregó la capacidad de establecer un InteractionPolicy en SpatialExternalSurfaces y SpatialPanels, lo que permite detectar clics y otros eventos de entrada en 3D. (Iae155)
  • Se agregó una sobrecarga de modificador de tamaño y requiredSize con ancho, altura y profundidad como valores de Dp. (I92f79).
  • La interfaz ParentLayoutParamsModifier ahora extiende DelegatableSubspaceNode. (I1a6d4)
  • ApplicationSubspace dejó de estar disponible y se reemplazó por la API de Subspace.
    • Se cambió el comportamiento de la API de Subspace para que solo proporcione un subespacio para toda la aplicación en la pose y la escala recomendadas.
    • Se introdujo la API de PlanarEmbeddedSubspace para proporcionar subespacios incorporados en contextos 2D. (Id3343)
  • Se agregó la marca shouldAutoInvalidate a la API de SubspaceModifier.Node. (I93902).
  • Se agregó required(Size|Width|Depth|Height) en las APIs que permiten a los desarrolladores restringir el tamaño de un @SubspaceComposable a un rango específico, sin tener en cuenta las restricciones de medición entrantes del elemento superior. (Ifaa78)
  • Se agregó SubspaceModifier.onSizeChanged, que proporciona una devolución de llamada simple y enfocada para que los desarrolladores reaccionen cuando cambia el tamaño de un @SubspaceComposable. (I994f9).
  • Se quitó la API de Volume. Se debe usar la API de SceneCoreEntity en lugar de la API de Volume. (I4162b)
  • Divide SubspaceLayoutModifierNode.requestRelayout en invalidateMeasurement/invalidatePlacement. (I14805)
  • Se agregó la API de SpatialGltfModel, que permite a los desarrolladores renderizar glTF en Compose. (Icc91f)
  • Se introdujo la API de componibilidad SpatialGltfModel para renderizar glTF con facilidad (Iade67).

Correcciones de errores

  • Se corrigió un error de diseño en SceneCoreEntity. Ahora debería respetar correctamente sus restricciones. (I11bb8)
  • Se redujeron los módulos jxr-compose a Compile sdk = 34 (I2d5db).

Versión 1.0.0-alpha08

22 de octubre de 2025

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha08 y androidx.xr.compose:compose-testing:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.

Cambios en la API

  • Se cambió ResizePolicy para aceptar onResizeStart, onResizeUpdate y onResizeEnd. (I7e21f).

Correcciones de errores

  • Se evita que se produzca una falla cuando se destruye una actividad con un Subspace. (I595a1).

Versión 1.0.0-alpha07

24 de septiembre de 2025

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha07 y androidx.xr.compose:compose-testing:1.0.0-alpha07. La versión 1.0.0-alpha07 incluye estas confirmaciones.

Cambios en la API

  • Se mejoraron los KDocs para SpatialMainPanel. (I27b70, b/444467891)
  • Se introdujo SpatialArrangement para organizar los elementos secundarios a lo largo del eje principal en diseños 3D, como SpatialRow y SpatialColumn. Esta nueva API proporciona opciones de disposición conocidas de Compose en 2D, como Start, End, Center, SpaceBetween, SpaceAround y SpaceEvenly, con compatibilidad total con las direcciones de diseño LTR y RTL. (I7db38, b/436289959)
  • Se agregó una interfaz base para SubspaceModifier.Node con el objetivo de mejorar la seguridad de tipos y la usabilidad de las interfaces de extensión, como
      .
    • CompositionLocalConsumerSubspaceModifierNode
    • LayoutCoordinatesAwareModifierNode
    • SubspaceLayoutModifierNode
    • CoreEntityNode (interno) (Iede00, b/440599394, b/440599394)
  • Se quitó la restricción de SpatialExternalSurface (I33315, b/439646773).
  • Se introdujo SubspaceModifier en los elementos componibles de Subspace y se reemplazó el parámetro de restricciones por SubspaceModifier con SubspaceModifiers relacionado con el tamaño. Si allowUnboundedSubspace es verdadero, los subespacios pueden tener restricciones sin límites. (Ib06e6, b/433331675)
  • Se dio de baja el SubspaceModifiers móvil y de tamaño variable ahora que DragPolicy() y ResizePolicy() forman parte de las APIs de SpatialPanel y SpatialExternalSurface (I397bf, b/437924639).
  • Se agregó compatibilidad con LayoutDirection en diseños espaciales. El elemento de componibilidad que usa SpatialAlignment ahora posicionará correctamente los elementos en contextos de LTR y RTL. (I964bb, b/436300273)
  • Agrega parámetros de cambio de tamaño y movimiento a las APIs de Panel para garantizar que estos comportamientos solo se puedan aplicar a los contenedores compatibles. (Id491c).
  • Se agregaron sizeIn, widthIn, heightIn y depthIn SubspaceModifiers, que te permiten establecer restricciones mínimas y máximas exactas para el ancho, la altura y la profundidad. (I1af09, b/433330761)

Versión 1.0.0-alpha06

13 de agosto de 2025

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha06 y androidx.xr.compose:compose-testing:1.0.0-alpha06. La versión 1.0.0-alpha06 contiene estas confirmaciones.

Correcciones de errores

  • Vuelve a crear el ComposeXrOwnerLocals cuando se destruya el propietario del ciclo de vida. (9123ce1)

Versión 1.0.0-alpha05

30 de julio de 2025

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha05 y androidx.xr.compose:compose-testing:1.0.0-alpha05. La versión 1.0.0-alpha05 incluye estas confirmaciones.

Nuevas funciones

  • Se hizo pública la clase de anotación SubspaceComposable. (Ic2a34, b/399432430)
  • Se agregaron dos nuevos elementos componibles SpatialExternalSurface que representan esferas de 180 y 360 grados. (I40ef2, b/391705799)
  • Se agregó SubspaceModifier.aspectRatio (Ide5ab, b/399729509, b/414762147).
  • Se agregó la API de SceneCoreEntity para mejorar la interoperabilidad entre SceneCore y Compose para RE. (I50bb3, b/423020989)
  • Se proporcionó la API de GravityAlignedsubspace para admitir la función GravityAligned sin escalar (I07359).

Cambios en la API

  • SpatialDialog() seguirá la configuración de prensa de SpatialDialogProperties.dismissOnBack. (Ib453b, b/416797132)
  • Actualiza minimumPanelDimension a un nuevo tamaño de dimensión predeterminado de Dimensions(0.1f, 0.1f, 0.1f) debido a su representación en metros. (Ib852a)
  • Los subespacios y los orbitadores ahora conservarán su estado interno en el espacio principal y cuando la app esté en segundo plano. En el modo de espacio principal, Subspace seguirá configurando su escena para prepararse para el cambio al modo de espacio completo. (I40317, b/416037751)
  • SpatialDialogs ahora conservará su estado cuando la app esté en segundo plano. (I6aa56)
  • Ahora, ApplicationSubspace heredará su escala y posición recomendadas del sistema. (I4565f, b/418834194)
  • Se agregó un mejor mensaje de error y se activa el error antes cuando se usa un SubspaceComposable en un contexto que no es SubspaceComposable. (Iee2ae, b/416484684)
  • Se actualizó ExperimentalSubspaceVolumeApi de advertencia a error, ya que las advertencias suelen pasarse por alto cuando se usan de forma incorrecta las APIs de elementos componibles. (I427aa, b/424864286)
  • El subespacio y ApplicationSubspace ahora están restringidos por recommendedContentBoxInFullSpace. Anteriormente, estaba limitado por el campo visual de SpatialUser. (I41015, b/423074142)
  • Se actualizó SpatialElevation para que use el tamaño mínimo y ya no use el tamaño hard-coded (I2dbe6, b/427785338).
  • Actualiza la forma en que oscurecemos la SpatialAcitivityPanel para que se actualice cuando se modifique una variable clave. (I0f64d, b/427999029)
  • Quita VolumeConstraints.Unbounded y, en su lugar, establece los valores de restricción predeterminados en el equivalente. (Ie24ec, b/407938414)
  • SpatialFeatheringSize ya no es público (I1c15b, b/399432430).
  • Se cambió el nombre de Placeable de XR a SubspacePlaceable para distinguirlo de Placeable de Compose. (I74874)
  • Se quitaron los parámetros de configuración de Orbiter y se agregó shouldRenderInNonSpatial como un parámetro nuevo. Además, se quitó la clase EdgeOffset y se agregó orbiterOffsetType como un parámetro nuevo para consolidar las funciones de Orbiter(). También se cambió el nombre de OrbiterEdge por ContentEdge. (Iebf3d).
  • Se cambió el nombre de Measurable a SubspaceMeasurable para diferenciar el tipo del tipo Measurable de Compose. (I9726c)
  • Se cambió el nombre de MeasureResult por SubspaceMeasureResult (I9f34d).
  • Se quitó la API de setSubspaceContent para usar setContent de Compose con un elemento de componibilidad Subspace. (Ifff4c, b/421427391, b/421427391)
  • El nombre de MeasurePolicy cambió por SubspaceMeasurePolicy. (I37a9b, b/422553904)
  • Convierte SubspaceSemanticsInfo en una interfaz sellada, ya que no podremos agregar miembros sin los valores predeterminados. (I372f9, b/423704068)
  • Se actualizó la documentación de SpatialExternalSurface y se cambió el nombre de ContentSecurityLevel a SurfaceProtection (I3c460, b/420982808).
  • Se proporcionó un constructor sobrecargado para el modificador movible que permite el anclaje. (Ic0c70).
  • Se agregaron más proveedores de posición para los cuadros de información, de modo que ahora los desarrolladores pueden controlar si el cuadro de información se coloca arriba, abajo, a la izquierda o a la derecha del ancla. Se agregó una API que toma un Shape para los cursores, de modo que se puedan proporcionar más formas personalizadas. (Ie513c, b/374766087, b/418854637)
  • Se quitó CoreEntity como PublishedApi (Ifee05).

Correcciones de errores

  • Se solucionó un problema por el que SpatialDialog parpadeaba cuando se renderizaba. (Ife73c, b/401619909)
  • Se solucionó un problema por el que SpatialDialog no podía oscurecer el panel de actividad. (I8ca6c, b/367442109)
  • Se corrigió un error por el que el diálogo de XR no mostraba parte del contenido (I17cd5, b/418062437).
  • Se corrigió un problema por el que se descartaba SpatialPopup cuando se hacía clic dentro del contenido. (If262c, b/417245722)
  • Se corrigió el problema por el que, cuando se encadenaba resizable().movable(), SpatialPanel no cambiaba de tamaño correctamente al nuevo tamaño. (I02ee3, b/422264230)
  • Se corrigió el problema por el que topBar se superponía con el menú en SpatialComposeVideoPlayer (Id33bc, b/427168167).
  • Se corrigió el radio de esquina que no se renderizaba (I975fe, b/428261830).

Versión 1.0.0-alpha04

7 de mayo de 2025

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha04 y androidx.xr.compose:compose-testing:1.0.0-alpha04. La versión 1.0.0-alpha04 incluye estas confirmaciones.

Nuevas funciones

  • Se agregó la interfaz CompositionLocalConsumerSubspaceModifierNode para permitir que los tipos personalizados de SubspaceModifier accedan a los valores locales de composición.
  • Se agregó una nueva API de SpatialPanel que sigue el estilo de implementación de AndroidView de Compose y deja de estar disponible la versión anterior de ViewBased SpatialPanel.
  • Se agregó el objeto complementario VolumeConstraints.Unbounded, que representa restricciones ilimitadas.
  • Se agregó SubspaceModifier.onPointSourceParams para permitir una fuente de audio espacializado.
  • Se agregó un ApplicationSubspace público, que ofrece un VolumeConstraints opcional para definir un área 3D en la que la app puede renderizar contenido espacial. De forma predeterminada, si no se especifican restricciones, el Subspace estará limitado por el campo visual actual de la SpatialUser en ancho y alto. Los usuarios pueden proporcionar restricciones para usar si no se puede determinar el campo visual. De lo contrario, se usan los valores predeterminados de ancho y alto del campo visual.
  • Se agregó SpatialExternalSurface, que se puede usar para renderizar contenido estereoscópico. SpatialExternalSurface se puede personalizar con modificadores (excepto alfa) y un efecto de difuminado de bordes.
  • Se agregó un nuevo modificador de subespacio pointerHoverIcon que permite a los usuarios establecer el ícono para el puntero espacial.

Cambios en la API

  • Se quitó la restricción de RequiresApi(34) en todos los paquetes de Jetpack XR. Esta restricción era redundante, ya que Jetpack XR actualmente solo está disponible en dispositivos con nivel de API 34 o superior. (Iae0f8)
  • Los proyectos lanzados con Kotlin 2.0 requieren KGP 2.0.0 o una versión posterior para consumirse. (Idb6b5).
  • El control de retroceso ahora funcionará en paneles espaciales sin actividades incorporadas. Para que funcione el control de retroceso, debes especificar android:enableOnBackInvokedCallback="true" en el manifiesto de Android.
  • El control de retroceso ahora funcionará en los diálogos espaciales. Para que funcione el control de retroceso, debes especificar android:enableOnBackInvokedCallback="true" en el manifiesto de Android.
  • Los SpatialPanel basados en Compose y en View ahora pueden ajustar su tamaño según su contenido.
  • Ahora, los desarrolladores pueden establecer sus propios valores de SpatialElevationLevel personalizados y no están limitados a los niveles predefinidos.
  • Ahora se puede personalizar el nivel de elevación del orbitador con el parámetro elevation.
  • Ahora, el subespacio se puede limitar de forma predeterminada por el campo visual de SpatialUser en ancho y alto. Si no se puede determinar el campo visual, se usan los valores predeterminados de ancho y alto del campo visual.
  • Se agregaron las nuevas devoluciones de llamada onMoveStart y onMoveEnd al modificador Movable. Las devoluciones de llamada onMoveStart y onMoveEnd se llaman cuando el usuario comienza y termina de mover un elemento componible de subespacio con el modificador movible.
  • Se quitó el parámetro name de las APIs espaciales, como SpatialRow y SpatialPanel. Para depurar árboles de Compose espaciales, usa SubspaceModifier.testTag en su lugar.
  • Se quitó una sobrecarga no compatible de SpatialPopup que solo tiene spatialElevationLevel y content. Usa la interfaz que admita onDimissRequest.
  • Se quitó la devolución de llamada onPoseChange del modificador Movable. Usa onMove en su lugar.
  • SubspaceModifiers ya no aplicará sus efectos si se desconecta o se está desconectando.
  • La API de SpatialRow existente se dividió en SpatialRow y SpatialCurvedRow. Si antes usabas el parámetro curveRadius de SpatialRow, ahora usa SpatialCurvedRow, que ofrece el mismo comportamiento.
  • MainPanel y ActivityPanel ya no tienen barras de título cuando se ejecutan en una imagen del sistema similarmente reciente.
  • Los modificadores de alfa y escala ahora se pueden apilar y multiplicarán sus valores para el valor de alfa o escala final aplicado.
  • Se optimizó la devolución de llamada onPoseChange del modificador Movable para que el movimiento de la pose sea más fluido.
  • Los modificadores móviles y de cambio de tamaño ahora realizarán sus devoluciones de llamada en el subproceso principal para garantizar que los cambios de estado activen la recomposición.
  • Se agregó la observación de estado a las fases de diseño y medición para garantizar que los cambios de estado en SubspaceLayout activen el rediseño.
  • Se optimizaron las actualizaciones de la cadena de modificadores para reutilizar mejor los modificadores existentes.

Correcciones de errores

  • Se detuvo la simulación cuando se muestra un SpatialDialog. (Ic4594)
  • Ahora se ignorarán las solicitudes de cambio de diseño que se realicen mientras los nodos modificadores estén desconectados.
  • Se quitaron las fases de cambio de diseño que activaban los modificadores Movable y Resizable.
  • Se corrigió una falla en el elemento componible MainPanel() que se producía cuando se establecía una dimensión en cero, ya sea directamente o durante un cálculo de diseño, p.ej., un cálculo de SpatialRow/SpatialColumn. En su lugar, ahora se ocultará el panel. Ten en cuenta que esta corrección aborda específicamente las fallas durante la fase de diseño. El cambio de tamaño del panel a cero a través de la interacción del usuario se controlará por separado. El panel oculto carece de affordances de IU.
  • Se corrigió un problema con maintainAspectRatio del modificador de cambio de tamaño. Ahora, se debería mantener la relación de aspecto.
  • Se solucionó un problema con los Subspaces anidados en el que se posicionaban de forma incorrecta para un solo fotograma.
  • Se solucionó un problema por el que, a veces, no se aplicaban las esquinas redondeadas cuando correspondía.
  • NestedSubspaces ya no aparecerá durante un fotograma en la ubicación incorrecta.

Versión 1.0.0-alpha03

26 de febrero de 2025

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha03 y androidx.xr.compose:compose-testing:1.0.0-alpha03 sin cambios notables desde la última versión alfa. La versión 1.0.0-alpha03 contiene estas confirmaciones.

Versión 1.0.0-alpha02

12 de febrero de 2025

Lanzamiento de androidx.xr.compose:compose:1.0.0-alpha02 y androidx.xr.compose:compose-testing:1.0.0-alpha02. La versión 1.0.0-alpha02 incluye estas confirmaciones.

Nuevas funciones

  • El panel de actividad ahora puede oscurecer su contenido cuando se activa un diálogo espacial.
  • La API de Orbiter ahora se puede usar en contextos de SubspaceComposable y adjuntará Orbiters a su elemento superior componible basado en SubspaceLayout más cercano.
  • Se introdujo LayoutCoordinatesAwareModifierNode para permitir modificadores personalizados basados en la posición.
  • Se agregaron métodos de ciclo de vida de conexión y desconexión a SubspaceModifier.Node.
  • Se agregó scaleWithDistance al modificador movible. Cuando se habilita scaleWithDistance, el elemento del subespacio que se mueve se expande o se contrae. También mantendrá cualquier escala explícita que haya tenido antes del movimiento.

Cambios en la API

  • Se quitó SessionCallbackProvider para usar SpatialCapabilities.

Otros cambios

  • Se redujo minSDK a 24. Todas las APIs de Jetpack XR siguen requiriendo la API 34 en el entorno de ejecución.
  • Los constructores Orbiter EdgeOffset.inner, EdgeOffset.outer y EdgeOffset.overlap ya no son métodos @Composable, lo que permite usarlos en contextos que no admiten composición.
  • Se actualizaron los niveles de elevación espacial para que coincidan con la especificación de UX más reciente.
  • Implementa la interfaz SubspaceSemanticsInfo en MeasurableLayout.
  • Se cambió el nombre de SubspaceModifierElement a SubspaceModifierNodeElement.

Correcciones de errores

  • Se realizaron correcciones para estabilizar el orden de SubspaceModifier. SubspaceModifier debería comportarse de manera más confiable. Los modificadores de desplazamiento, rotación, escala, movimiento y cambio de tamaño ahora deberían poder usarse en cualquier orden.

Versión 1.0.0-alpha01

12 de diciembre de 2024

Lanzamiento de androidx.xr.compose:compose-*1.0.0-alpha01.

Funciones de la versión inicial

  • Versión inicial para desarrolladores de Jetpack Compose para XR. Usa conceptos conocidos de Compose, como filas y columnas, para crear diseños de IU espaciales en XR, ya sea que portes una app en 2D existente a XR o que crees una nueva app de XR desde cero. Esta biblioteca proporciona elementos componibles espaciales y de subespacio, como paneles espaciales y orbitadores, que te permiten colocar tu IU existente basada en Compose o Views en un diseño espacial. Se presenta el elemento componible de subespacio Volume, que te permite colocar entidades de SceneCore, como modelos 3D, en relación con tu IU. Obtén más información en esta guía para desarrolladores:

    • Subspace: Este elemento componible se puede colocar en cualquier lugar dentro de la jerarquía de la IU de tu app, lo que te permite mantener diseños para la IU espacial y en 2D sin perder el contexto entre los archivos. Esto facilita el uso compartido de elementos, como la arquitectura de la app existente, entre la XR y otros factores de forma sin necesidad de elevar el estado a través de todo el árbol de la IU ni rediseñar la app.

    • SpatialPanel: Un panel espacial es un elemento componible de subespacio que te permite mostrar contenido de la app. Por ejemplo, puedes mostrar la reproducción de un video, imágenes estáticas o cualquier otro contenido en un panel espacial.

    • Orbitador: Un orbitador es un componente de la IU espacial. Está diseñado para adjuntarse a un panel espacial correspondiente y contiene elementos de navegación y de acción contextual relacionados con ese panel espacial. Por ejemplo, si creaste un panel espacial para mostrar contenido de video, puedes agregar controles de reproducción de video dentro de un orbitador.

    • Volumen: Coloca entidades de SceneCore, como modelos 3D, en relación con tu IU.

  • Diseño espacial: Puedes crear varios paneles espaciales y colocarlos dentro de un diseño espacial con SpatialRow, SpatialColumn, SpatialBox y SpatialLayoutSpacer. Usa SubspaceModifier para personalizar tu diseño.

  • Componentes de IU espacial: Estos elementos se pueden reutilizar en tu IU en 2D, y sus atributos espaciales solo serán visibles cuando se habiliten las funciones espaciales.

    • SpatialDialog: El panel se desplazará ligeramente hacia atrás en la profundidad Z para mostrar un diálogo elevado.
    • SpatialPopUp: El panel se desplazará ligeramente hacia atrás en la profundidad del eje Z para mostrar una ventana emergente elevada.
    • SpatialElevation: Se puede configurar SpatialElevationLevel para agregar elevación.
  • SpatialCapabilities: Las capacidades espaciales pueden cambiar a medida que los usuarios interactúan con tu app o el sistema, o incluso tu app puede cambiarlas, por ejemplo, cuando se mueve al espacio principal o al espacio completo. Para evitar problemas, tu app debe verificar LocalSpatialCapabilities.current para determinar qué APIs son compatibles con el entorno actual. isSpatialUiEnabled: Elementos de la IU espacial (p.ej., SpatialPanel) isContent3dEnabled: Objetos 3D isAppEnvironmentEnabled: El entorno isPassthroughControlEnabled: Si la aplicación puede controlar el estado de transferencia o no isSpatialAudioEnabled: Audio espacial

Errores conocidos

  • Actualmente, se requiere un minSDK de 30 para usar Jetpack Compose para XR. Como solución alternativa, puedes agregar la siguiente entrada de manifiesto <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> para poder compilar y ejecutar con un minSDK de 23.
  • Por el momento, las apps de Jetpack XR requieren que se solicite el permiso android.permission.SCENE_UNDERSTANDING en el AndroidManifest.
  • Cuando una app se inicia directamente en el espacio completo con la propiedad PROPERTY_XR_ACTIVITY_START_MODE en su manifiesto, las actividades o aplicaciones se abren inicialmente en el espacio principal antes de pasar al espacio completo.
  • Es posible que los glTF en elementos componibles de volumen parpadeen inicialmente en la ubicación incorrecta.
  • Si usas un SpatialDialog en un panel que se movió de forma significativa, el contenido se desplazará en la dirección incorrecta.