Desenvolver a interface de apps baseados em visualizações do Android

Testar o Compose
O Jetpack Compose usando o SDK do Jetpack XR é o kit de ferramentas de interface recomendado para Android XR.

Usar o framework do Android Jetpack Compose é a melhor maneira de aproveitar os avanços mais recentes no desenvolvimento de interfaces do Android e garantir que seu app permaneça atualizado com as práticas recomendadas do setor.

No entanto, se você não tiver feito a migração e estiver trabalhando para espacializar um app baseado em Views Android, há algumas abordagens que podem ser usadas.

Reutilizar visualizações existentes em SpatialPanels

Embora os SpatialPanels façam parte da biblioteca Jetpack Compose para XR, eles também aceitam visualizações. Ao usar setSubspaceContent na MainActivity, coloque uma visualização em um SpatialPanel, conforme mostrado no exemplo a seguir.

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

Usar visualizações do Android e APIs de interoperabilidade do Compose

Consulte orientações sobre a interoperabilidade entre Views e Compose. Esta documentação aborda o uso desses frameworks e contém links para exemplos de código que você pode usar.

Use uma ComposeView para adicionar painéis espaciais e orbitadores a um fragmento

Use um ComposeView no layout XML para adicionar elementos combináveis e criar novos conteúdos de RA. Use [ViewBinding][ViewBinding] para chamar o ComposeView na função onCreateView.

Leia mais sobre as orientações 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
   }
}

Trabalhar diretamente com a biblioteca Jetpack SceneCore

O Compose for XR é baseado no Jetpack SceneCore. Se você estiver espacializando um app baseado em visualizações, poderá continuar usando o código de interface existente no Compose para XR ou trabalhar diretamente com o Session do Jetpack SceneCore.

É possível criar painéis diretamente no SceneCore usando PanelEntity. Faça com que os painéis sejam móveis ou redimensionáveis usando componentes. Para mais informações, consulte Adicionar comportamento comum a entidades.

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