Un sottospazio è una partizione dello spazio 3D all'interno della tua app in cui puoi posizionare modelli 3D, creare layout 3D e aggiungere profondità a contenuti altrimenti 2D. Un sottospazio viene visualizzato solo quando la spazializzazione è attiva. In Home Space o su dispositivi non XR, qualsiasi codice all'interno di questo sottospazio viene ignorato.
Per saperne di più sui layout spaziali e sui componenti che puoi utilizzare all'interno di un sottospazio, consulta Componenti spazializzati.
Informazioni sulle gerarchie di sottospazi
Subspace di primo livello è lo spazio secondario più esterno richiamato dalla tua app.
Ogni chiamata a un metodo Subspace crea una nuova gerarchia di UI spaziale indipendente. Non eredita la posizione spaziale, l'orientamento o la scala di alcun Subspace principale in cui è nidificato.
Per creare un Subspace incorporato o nidificato all'interno di un SpatialPanel, Orbiter,
SpatialPopup o un altro componente, utilizza PlanarEmbeddedSubspace.
PlanarEmbeddedSubspace presenta due differenze principali rispetto a Subspace:
- Partecipano al layout 2D in cui vengono richiamati. Ciò significa che l'altezza e la larghezza del sottospazio saranno limitate dall'altezza e dalla larghezza del layout principale 2D.
- Si comportano come elementi secondari dell'entità in cui vengono richiamati. Ciò significa che, se chiami un composable di un sottospazio nidificato all'interno di un
SpatialPanel, quel sottospazio è un elemento secondario delSpatialPanelin cui viene chiamato.
Questi comportamenti di PlanarEmbeddedSubspace consentono funzionalità come:
- Spostamento dell'entità secondaria con l'entità principale
- Compensazione della posizione dell'elemento secondario utilizzando l'offset
SubspaceModifier - Presentare un oggetto 3D che si trova sopra la UI 2D e corrisponde all'altezza e alla larghezza dello spazio appropriato nel layout 2D
Adatta i layout per un sottospazio
Su Android XR, il layout della tua app è associato a VolumeConstraints di
Subspace in modalità spazio intero per impostazione predefinita. Per questo motivo, devi considerare la quantità di spazio visibile a disposizione dell'utente e regolare il layout di conseguenza. recommendedContentBoxInFullSpace fornisce le dimensioni specifiche per il riquadro di delimitazione all'interno di ActivitySpace in modo che i contenuti possano essere posizionati nel campo visivo dell'utente.
I contenuti principali dell'app devono rientrare in questa casella. Se i tuoi contenuti devono superare i limiti consigliati, valuta la possibilità di utilizzare un layout che incoraggi gli utenti a esplorare lo spazio muovendo la testa. Il vincolo predefinito di
recommendedContentBoxInFullSpace può essere sostituito applicando un modificatore personalizzato
basato sulle dimensioni, ad esempio SubspaceModifier.requiredSizeIn. Per un comportamento non limitato, imposta allowUnboundedSubspace = true.
Chiama recommendedContentBoxInFullSpace utilizzando la Session corrente per ottenere queste dimensioni specifiche in base alle tue esigenze. Vedi l'esempio di seguito:
val session = LocalSession.current session?.scene?.activitySpace?.recommendedContentBoxInFullSpace
Aggiungi un sottospazio alla tua app
Il seguente esempio di codice mostra come aggiungere Subspace e PlanarEmbeddedSubspace alla tua app:
setContent { // This is a top-level subspace Subspace { SpatialPanel { MyComposable() } } }
@Composable private fun MyComposable() { Row { PrimaryPane() SecondaryPane() } } @Composable private fun PrimaryPane() { // This is an embedded subspace, because PrimaryPane is in a SpatialPanel // and that SpatialPanel is in the top-level Subspace PlanarEmbeddedSubspace { SpatialPanel {} } }
Per ulteriori dettagli, consulta la documentazione di riferimento completa su Subspace e PlanarEmbeddedSubspace.