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"
)