Jetpack Compose per XR
Ultimo aggiornamento | Release stabile | Candidato per la release | Versione beta | Versione alpha |
---|---|---|---|---|
7 maggio 2025 | - | - | - | 1.0.0-alpha04 |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza a XR compose, devi aggiungere il repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il repository Maven di Google.
Aggiungi le dipendenze per gli elementi necessari nel file build.gradle
per la tua app o il tuo modulo:
dependencies { implementation "androidx.xr.compose:compose:1.0.0-alpha04" // Use to write unit tests testImplementation "androidx.xr.compose:compose-testing:1.0.0-alpha04" }
dependencies { implementation("androidx.xr.compose:compose:1.0.0-alpha04") // Use to write unit tests testImplementation("androidx.xr.compose:compose-testing:1.0.0-alpha04") }
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione del Tracker dei problemi.
Versione 1.0
Versione 1.0.0-alpha04
7 maggio 2025
androidx.xr.compose:compose:1.0.0-alpha04
e androidx.xr.compose:compose-testing:1.0.0-alpha04
vengono rilasciati. La versione 1.0.0-alpha04 contiene questi commit.
Nuove funzionalità
- È stata aggiunta l'interfaccia
CompositionLocalConsumerSubspaceModifierNode
per consentire ai tipiSubspaceModifier
personalizzati di accedere ai valori locali della composizione. - È stata aggiunta una nuova API
SpatialPanel
che segue lo stile di implementazione di ComposeAndroidView
e ritira la precedenteViewBased SpatialPanel
. - È stato aggiunto l'oggetto complementare
VolumeConstraints.Unbounded
che rappresenta vincoli illimitati. - È stato aggiunto
SubspaceModifier.onPointSourceParams
per consentire un'origine audio spazializzata. - È stato aggiunto un
ApplicationSubspace
pubblico che offreVolumeConstraints
facoltativi per definire un'area 3D in cui l'app può visualizzare contenuti spaziali. Per impostazione predefinita, se non vengono specificati vincoli, lo spazio sottostante sarà delimitato dall'attuale campo visivo diSpatialUser
in larghezza e altezza. Gli utenti possono fornire vincoli da utilizzare se non è possibile determinare il campo visivo. In caso contrario, vengono utilizzati i valori predefiniti di larghezza e altezza del campo visivo. - È stato aggiunto
SpatialExternalSurface
, che può essere utilizzato per il rendering di contenuti stereoscopici.SpatialExternalSurface
è personalizzabile con modificatori (tranne alpha) e un effetto sfumatura dei bordi. - È stato aggiunto un nuovo modificatore di sottospazio
pointerHoverIcon
che consente agli utenti di impostare l'icona per il cursore spaziale.
Modifiche all'API
- È stata rimossa la limitazione
RequiresApi(34)
su tutti i pacchetti Jetpack XR. Questa limitazione era ridondante perché Jetpack XR è attualmente disponibile solo sui dispositivi con livello API 34 e versioni successive. (Iae0f8) - I progetti rilasciati con Kotlin 2.0 richiedono KGP 2.0.0 o versioni successive per essere utilizzati. (Idb6b5)
- La gestione del pulsante Indietro ora funziona nei riquadri spaziali senza attività incorporate. Affinché la gestione del pulsante Indietro funzioni, devi specificare
android:enableOnBackInvokedCallback="true"
nel file manifest Android. - La gestione a ritroso ora funziona nelle conversazioni spaziali. Affinché il backhandling funzioni, devi specificare
android:enableOnBackInvokedCallback="true"
nel file manifest Android. - Ora i
SpatialPanel
basati su composizione e visualizzazione possono adattarsi alle dimensioni dei contenuti. - Ora gli sviluppatori possono impostare i propri valori
SpatialElevationLevel
personalizzati e non sono limitati ai livelli predefiniti. - Ora il livello di elevazione dell'orbiter può essere personalizzato tramite il parametro
elevation
. - Per impostazione predefinita, lo spazio sottostante può essere delimitato dal campo visivo di
SpatialUser
in larghezza e altezza. Se non è possibile determinare il campo visivo, vengono utilizzati i valori predefiniti di larghezza e altezza del campo visivo. - Sono stati aggiunti nuovi callback
onMoveStart
eonMoveEnd
al modificatoreMovable
. I callbackonMoveStart
eonMoveEnd
vengono chiamati quando l'utente inizia e termina lo spostamento di un sottospazio componibile con il modificatore mobile. - Il parametro
name
è stato rimosso dalle API spaziali comeSpatialRow
eSpatialPanel
. Per il debug delle strutture di composizione spaziale, utilizza inveceSubspaceModifier.testTag
. - È stata rimossa un'overload non supportata di
SpatialPopup
che ha solospatialElevationLevel
econtent
. Utilizza l'interfaccia che supportaonDimissRequest
. - Il callback
onPoseChange
dal modificatore Movable è stato rimosso. Utilizza inveceonMove
. SubspaceModifiers
non applicherà più i propri effetti se è scollegato o è in corso lo scollegamento.- L'API
SpatialRow
esistente è stata suddivisa inSpatialRow
eSpatialCurvedRow
. Se in precedenza utilizzavi il parametrocurveRadius
diSpatialRow
, ora utilizzaSpatialCurvedRow
, che offre lo stesso comportamento. MainPanel
eActivityPanel
non hanno più barre dei titoli quando vengono eseguiti su un'immagine di sistema altrettanto recente.- I modificatori di alfa e scala ora sono impilabili e moltiplicano i loro valori per il valore alfa o di scala applicato finale.
- Il callout
onPoseChange
del modificatore Movable è stato ottimizzato per eseguire un movimento più fluido delle pose. - Ora i modificatori spostabili e ridimensionabili eseguiranno i relativi callback sul thread principale per garantire che le modifiche dello stato attiveranno la ricompozione.
- È stata aggiunta l'osservazione dello stato alle fasi di layout e misura per garantire che le modifiche dello stato in
SubspaceLayout
attiveranno il nuovo layout. - Aggiornamenti della catena di modificatori ottimizzati per riutilizzare meglio i modificatori esistenti.
Correzioni di bug
- La scrim è stata interrotta quando viene visualizzato un
SpatialDialog
. (Ic4594) - Le richieste di nuovo layout effettuate quando i nodi modificatori sono scollegati verranno ora ignorate.
- Sono state rimosse le fasi di riallineamento attivate dai modificatori Spostabile e Ridimensionabile.
- È stato risolto un arresto anomalo nel composable
MainPanel()
che si verificava quando una delle dimensioni era impostata su zero, direttamente o durante un calcolo del layout, ad esempio un calcolo diSpatialRow/SpatialColumn
. Il riquadro verrà invece nascosto. Tieni presente che questa correzione risolve in modo specifico i crash durante la fase di layout; la modifica delle dimensioni del riquadro in modo che sia pari a zero tramite l'interazione dell'utente verrà gestita separatamente. Il riquadro nascosto non offre funzionalità di UI. - È stato risolto il problema relativo a
maintainAspectRatio
del modificatore ridimensionabile. Le proporzioni dovrebbero essere mantenute. - È stato risolto un problema relativo agli spazi sottoinsiemi nidificati, che non venivano posizionati correttamente per un singolo frame.
- È stato risolto il problema per cui a volte i bordi arrotondati non venivano applicati quando dovevano.
NestedSubspaces
non verrà più visualizzato per un fotogramma nella posizione sbagliata.
Versione 1.0.0-alpha03
26 febbraio 2025
androidx.xr.compose:compose:1.0.0-alpha03
e androidx.xr.compose:compose-testing:1.0.0-alpha03
vengono rilasciati senza modifiche significative rispetto all'ultima versione alpha. La versione 1.0.0-alpha03 contiene questi commit
Versione 1.0.0-alpha02
12 febbraio 2025
androidx.xr.compose:compose:1.0.0-alpha02
e androidx.xr.compose:compose-testing:1.0.0-alpha02
vengono rilasciati. La versione 1.0.0-alpha02 contiene questi commit.
Nuove funzionalità
- Ora il riquadro delle attività può oscurare i contenuti quando è attivata una finestra di dialogo spaziale.
- L'API
Orbiter
è ora utilizzabile nei contestiSubspaceComposable
e collegherà gli Orbiter al relativo elemento principale composable basato suSubspaceLayout
più vicino. - È stato introdotto
LayoutCoordinatesAwareModifierNode
per consentire modificatori basati sul posizionamento personalizzato. - Sono stati aggiunti metodi del ciclo di vita di attacco/scollegamento a
SubspaceModifier.Node
. - È stato aggiunto
scaleWithDistance
al modificatore mobile. QuandoscaleWithDistance
è attivato, l'elemento sottospazio spostato aumenta o diminuisce. Mantiene inoltre qualsiasi scala esplicita che aveva prima del movimento.
Modifiche all'API
SessionCallbackProvider
è stato rimosso in favore diSpatialCapabilities
.
Altre modifiche
- Ridotto da
minSDK
a 24. Tutte le API Jetpack XR continuano a richiedere l'API 34 in fase di runtime. - I costruttori
Orbiter
EdgeOffset.inner
,EdgeOffset.outer
eEdgeOffset.overlap
non sono più metodi@Composable
, il che consente di utilizzarli in contesti non componibili. - Aggiorna i livelli di elevazione spaziale in modo che corrispondano alle ultime specifiche UX.
- Implementa l'interfaccia
SubspaceSemanticsInfo
inMeasurableLayout
. SubspaceModifierElement
rinominato inSubspaceModifierNodeElement
.
Correzioni di bug
- Correzioni per stabilizzare l'ordinamento
SubspaceModifier
.SubspaceModifier
dovrebbe comportarsi in modo più affidabile. Ora i modificatori offset, ruota, scala, spostabile e ridimensionabile dovrebbero essere utilizzabili in qualsiasi ordine.
Versione 1.0.0-alpha01
12 dicembre 2024
androidx.xr.compose:compose-*1.0.0-alpha01
viene rilasciato.
Funzionalità della versione iniziale
Release iniziale per sviluppatori di Jetpack Compose per XR. Utilizza concetti di Compose familiari, come righe e colonne, per creare layout dell'interfaccia utente spaziale in XR, indipendentemente dal fatto che tu stia eseguendo il porting di un'app 2D esistente in XR o creando una nuova app XR da zero. Questa libreria fornisce composibili nello spazio e nello spazio sottostante, ad esempio pannelli e orbiter spaziali, che ti consentono di posizionare l'interfaccia utente 2D esistente basata su Compose o Views in un layout spaziale. Viene introdotto il composable sottospazio Volume, che consente di posizionare entità SceneCore, come i modelli 3D, rispetto all'interfaccia utente. Scopri di più in questa guida per gli sviluppatori:
Subspace
: questo composable può essere posizionato in qualsiasi punto della gerarchia dell'interfaccia utente dell'app, consentendoti di mantenere i layout per l'interfaccia utente 2D e spaziale senza perdere il contesto tra i file. In questo modo è più facile condividere elementi come l'architettura dell'app esistente tra XR e altri fattori di forma senza dover eseguire l'elevazione dello stato nell'intera struttura dell'interfaccia utente o ristrutturare l'app.SpatialPanel: un riquadro spaziale è un componente componibile sottospaziale che ti consente di visualizzare i contenuti dell'app. Ad esempio, in un riquadro spaziale puoi visualizzare la riproduzione di video, immagini fisse o qualsiasi altro contenuto.
Orbiter: un orbiter è un componente dell'interfaccia utente spaziale. È progettato per essere collegato a un riquadro spaziale corrispondente e contiene attività di navigazione e contestuali correlate a quel riquadro spaziale. Ad esempio, se hai creato un riquadro spaziale per visualizzare contenuti video, puoi aggiungere i controlli di riproduzione video all'interno di un orbiter.
Volume: posiziona le entità SceneCore, ad esempio i modelli 3D, rispetto all'interfaccia utente.
Layout spaziale: puoi creare più riquadri spaziali e posizionarli all'interno di un layout spaziale utilizzando
SpatialRow
,SpatialColumn
,SpatialBox
eSpatialLayoutSpacer
. Utilizza iSubspaceModifier
per personalizzare il layout.Componenti dell'interfaccia utente spaziale: questi elementi possono essere riutilizzati nell'interfaccia utente 2D e i relativi attributi spaziali saranno visibili solo quando le funzionalità spaziali sono attivate.
SpatialDialog
: il riquadro si spingerà leggermente indietro in profondità z per visualizzare una finestra di dialogo in primo piano.SpatialPopUp
: il riquadro si spingerà leggermente indietro in Z-depth per visualizzare un popup rialzatoSpatialElevation
:SpatialElevationLevel
può essere impostato per aggiungere l'elevazione.
SpatialCapabilities: le funzionalità spaziali possono cambiare man mano che gli utenti interagiscono con la tua app o con il sistema oppure possono essere modificate anche dalla tua app stessa, ad esempio passando allo spazio della casa o allo spazio completo. Per evitare problemi, l'app deve verificare la presenza di
LocalSpatialCapabilities.current
per determinare quali API sono supportate nell'ambiente corrente.isSpatialUiEnabled
: elementi dell'interfaccia utente spaziale (ad es. SpatialPanel)isContent3dEnabled
: oggetti 3DisAppEnvironmentEnabled
: l'ambienteisPassthroughControlEnabled
: indica se l'applicazione può controllare o meno lo stato di passthroughisSpatialAudioEnabled
: audio spaziale
Problemi noti
- Attualmente è necessaria una versione minima dell'SDK pari a 30 per utilizzare Jetpack Compose per XR. Come soluzione alternativa, puoi aggiungere la seguente voce manifest
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
per poter eseguire la compilazione e l'esecuzione con un minSDK di 23. - Al momento le app Jetpack XR richiedono la richiesta dell'autorizzazione
android.permission.SCENE_UNDERSTANDING
in AndroidManifest. - Quando un'app viene avviata direttamente nello spazio intero utilizzando la proprietà
PROPERTY_XR_ACTIVITY_START_MODE
nel file manifest, le attività/app vengono inizialmente aperte nello spazio Home prima di passare allo spazio intero. - I file glTF nei composabili di volume potrebbero inizialmente tremolare nella posizione sbagliata.
- L'utilizzo di un riquadro SpatialDialog in un riquadro spostato in modo significativo spingerà i contenuti nella direzione sbagliata.