Cómo desarrollar una IU para apps basadas en objetos View de Android

Prueba la forma de Compose
Jetpack Compose con el SDK de Jetpack XR es el kit de herramientas de IU recomendado para Android XR.

El uso del framework de Android Jetpack Compose es la mejor manera de aprovechar los avances más recientes en el desarrollo de la IU de Android y garantizar que tu aplicación siga siendo actual con las prácticas recomendadas de la industria.

Sin embargo, si no migraste y estás trabajando para espacializar una app basada en Views de Android, hay algunos enfoques que puedes adoptar.

Cómo volver a usar tus vistas existentes en SpatialPanels

Si bien los SpatialPanel forman parte de la biblioteca de Jetpack Compose para XR, también aceptan objetos View. Cuando uses setSubspaceContent en MainActivity, coloca una vista existente en SpatialPanel, como se muestra en el siguiente ejemplo.

setSubspaceContent {
   SpatialPanel(
       view = MyCustomView(this),
       modifier = SubspaceModifier.height(500.dp).width(500.dp).depth(25.dp)
   )
}

Usa las APIs de interoperabilidad de Android Views y Compose

Consulta la guía sobre la interoperabilidad entre Views y Compose. En esta documentación, se explica el uso conjunto de estos frameworks y se incluyen vínculos a muestras de código que puedes usar.

Usa un ComposeView para agregar paneles espaciales y orbitadores a un fragmento existente

Usa un ComposeView en tu diseño XML para agregar elementos componibles y crear contenido de XR nuevo. Usa [ViewBinding][ViewBinding] para llamar a ComposeView en la función onCreateView.

Obtén más información sobre la orientación de ComposeView.

override fun onCreateView(
   inflater: LayoutInflater,
   container: ViewGroup?,
   savedInstanceState: Bundle?
): View {
   val view = inflater.inflate(R.layout.fragment_first, container, false)
   val composeView = view.findViewById<ComposeView>(R.id.compose_view)
   composeView.apply {
       // Dispose of the Composition when the view's LifecycleOwner
       // is destroyed
       setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
       setContent {
           // In Compose world
           Orbiter(
               position = Edge.Top,
               offset = 10.dp,
               alignment = Alignment.End
           ) {
               SpatialPanel(SubspaceModifier.height(500.dp).width(500.dp)) {
                   Text("Spatial Panel with Orbiter")
               }
           }
       }
       return view
   }
}

Trabaja directamente con la biblioteca de Jetpack SceneCore

Compose para XR se compila sobre Jetpack SceneCore. Si estás espacializando una app basada en objetos View, puedes seguir usando tu código de IU existente en Compose para XR o elegir trabajar directamente con Session de Jetpack SceneCore.

Puedes compilar paneles directamente desde SceneCore con PanelEntity. Usa componentes para que los paneles se puedan mover o cambiar de tamaño. Para obtener más información, consulta Cómo agregar un comportamiento común a las entidades.

val panelContent = MyCustomView(this)
val panelEntity = xrSession.createPanelEntity(
   panelContent,
   surfaceDimensionsPx = Dimensions(500f,500f,500f),
   dimensions = Dimensions(1f,1f,1f),
   name = "panel entity"
)