L'utilizzo del framework Android Jetpack Compose è il modo migliore per sfruttare gli ultimi progressi nello sviluppo dell'interfaccia utente di Android e assicurarti che la tua applicazione rimanga aggiornata con le best practice del settore.
Tuttavia, se non hai eseguito la migrazione e stai lavorando per spazializzare un'app basata su Android Views, puoi adottare alcuni approcci.
Riutilizzare le visualizzazioni esistenti in SpatialPanels
Sebbene i SpatialPanel
siano parte della libreria
Jetpack Compose per XR, accettano anche le viste. Quando utilizzi
setSubspaceContent
in
MainActivity, inserisci una vista esistente in un
SpatialPanel
come mostrato nell'esempio seguente.
setSubspaceContent {
SpatialPanel(
view = MyCustomView(this),
modifier = SubspaceModifier.height(500.dp).width(500.dp).depth(25.dp)
)
}
Utilizzare le API di interoperabilità di Android Views e Compose
Consulta le linee guida sull'interoperabilità tra Visualizzazioni e Scrivi. Questa documentazione illustra l'utilizzo combinato di questi framework e contiene link a esempi di codice che puoi utilizzare.
Utilizzare una ComposeView per aggiungere pannelli spaziali e orbitanti a un frammento esistente
Utilizza un elemento ComposeView
nel layout XML per aggiungere composabili e creare nuovi contenuti XR. Utilizza [ViewBinding
][ViewBinding] per chiamare
ComposeView
nella funzione onCreateView
.
Scopri di più sulle indicazioni per 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
}
}
Lavorare direttamente con la libreria Jetpack SceneCore
Compose for XR è basato su Jetpack
SceneCore. Se stai spazializzando un'app basata su View, puoi continuare a utilizzare il codice UI esistente in Compose for XR o scegliere di lavorare direttamente con Session
di Jetpack SceneCore.
Puoi creare riquadri direttamente da SceneCore utilizzando
PanelEntity
. Rendi i riquadri spostabili o ridimensionabili utilizzando i componenti. Per ulteriori informazioni, vedi Aggiungere un comportamento comune alle entità.
val panelContent = MyCustomView(this)
val panelEntity = xrSession.createPanelEntity(
panelContent,
surfaceDimensionsPx = Dimensions(500f,500f,500f),
dimensions = Dimensions(1f,1f,1f),
name = "panel entity"
)