Jetpack Compose for XR

Créez de manière déclarative des mises en page d'interface utilisateur spatiales qui exploitent les fonctionnalités spatiales d'Android XR.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
7 mai 2025 - - - 1.0.0-alpha04

Déclarer des dépendances

Pour ajouter une dépendance à XR Compose, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.

Ajoutez les dépendances correspondant aux artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou de votre module :

Groovy

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

Kotlin

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

Pour en savoir plus sur les dépendances, consultez Ajouter des dépendances de compilation.

Commentaires

Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.

Signaler un nouveau problème

Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.

Version 1.0

Version 1.0.0-alpha04

7 mai 2025

Publication d'androidx.xr.compose:compose:1.0.0-alpha04 et d'androidx.xr.compose:compose-testing:1.0.0-alpha04. La version 1.0.0-alpha04 contient ces commits.

Nouvelles fonctionnalités

  • Ajout de l'interface CompositionLocalConsumerSubspaceModifierNode pour permettre aux types SubspaceModifier personnalisés d'accéder aux valeurs locales de composition.
  • Ajout d'une nouvelle API SpatialPanel qui suit le style d'implémentation AndroidView de Compose et abandon de l'ancienne ViewBased SpatialPanel.
  • Ajout de l'objet compagnon VolumeConstraints.Unbounded, qui représente les contraintes illimitées.
  • Ajout de SubspaceModifier.onPointSourceParams pour permettre une source audio spatialisée.
  • Un ApplicationSubspace public a été ajouté, offrant des VolumeConstraints facultatifs pour définir une zone 3D dans laquelle l'application peut afficher du contenu spatial. Par défaut, si aucune contrainte n'est spécifiée, l'espace sous-jacent est limité par le champ de vision actuel de SpatialUser en largeur et en hauteur. Les utilisateurs peuvent fournir des contraintes à utiliser si le champ de vision ne peut pas être déterminé. Sinon, les valeurs de largeur et de hauteur du champ de vision par défaut sont utilisées.
  • Ajout de SpatialExternalSurface, qui permet d'afficher du contenu stéréoscopique. SpatialExternalSurface est personnalisable avec des modificateurs (sauf alpha) et un effet de dégradé de bord.
  • Ajout d'un nouveau modificateur de sous-espace pointerHoverIcon permettant aux utilisateurs de définir l'icône du pointeur spatial.

Modifications apportées à l'API

  • Suppression de la restriction RequiresApi(34) sur tous les packages Jetpack XR. Cette restriction était redondante, car Jetpack XR n'est actuellement disponible que sur les appareils équipés d'un niveau d'API 34 ou supérieur. (Iae0f8)
  • Les projets publiés avec Kotlin 2.0 nécessitent KGP 2.0.0 ou une version ultérieure pour être consommés. (Idb6b5)
  • La gestion du Retour fonctionne désormais sur les panneaux spatiaux sans activités intégrées. Pour que la gestion du Retour fonctionne, vous devez spécifier android:enableOnBackInvokedCallback="true" dans le fichier manifeste Android.
  • La gestion du Retour fonctionne désormais avec les boîtes de dialogue spatiales. Pour que la gestion des retours fonctionne, vous devez spécifier android:enableOnBackInvokedCallback="true" dans le fichier manifeste Android.
  • Les SpatialPanel basées sur Compose et les vues peuvent désormais s'adapter en fonction de leur contenu.
  • Les développeurs peuvent désormais définir leurs propres valeurs SpatialElevationLevel personnalisées et ne sont plus limités aux niveaux prédéfinis.
  • Vous pouvez désormais personnaliser le niveau d'élévation de l'orbiteur à l'aide du paramètre elevation.
  • Par défaut, le sous-espace peut désormais être limité par le champ de vision de SpatialUser en largeur et en hauteur. Si le champ de vision ne peut pas être déterminé, les valeurs de largeur et de hauteur par défaut sont utilisées.
  • Ajout de nouveaux rappels onMoveStart et onMoveEnd au modificateur Movable. Les rappels onMoveStart et onMoveEnd sont appelés lorsque l'utilisateur commence et termine le déplacement d'un composable de sous-espace avec le modificateur mobile.
  • Le paramètre name a été supprimé des API spatiales telles que SpatialRow et SpatialPanel. Pour déboguer les arbres de composition spatiale, utilisez plutôt SubspaceModifier.testTag.
  • Suppression d'une surcharge non prise en charge de SpatialPopup qui ne comporte que spatialElevationLevel et content. Veuillez utiliser l'interface compatible avec onDimissRequest.
  • Le rappel onPoseChange du modificateur Movable a été supprimé. Utilisez onMove à la place.
  • SubspaceModifiers n'appliquera plus ses effets s'ils sont dissociés ou en cours de dissociation.
  • L'API SpatialRow existante a été divisée en SpatialRow et SpatialCurvedRow. Si vous utilisiez auparavant le paramètre curveRadius de SpatialRow, utilisez désormais SpatialCurvedRow, qui offre le même comportement.
  • MainPanel et ActivityPanel n'ont plus de barres de titre lorsqu'ils sont exécutés sur une image système récente.
  • Les modificateurs d'alpha et de mise à l'échelle sont désormais empilables et multiplient leurs valeurs pour obtenir la valeur d'alpha ou de mise à l'échelle finale appliquée.
  • Le rappel onPoseChange du modificateur Movable a été optimisé pour effectuer un mouvement de pose plus fluide.
  • Les modificateurs mobiles et redimensionnables exécutent désormais leurs rappels sur le thread principal pour s'assurer que les changements d'état déclenchent une recomposition.
  • Ajout d'une observation de l'état aux phases de mise en page et de mesure pour s'assurer que les modifications d'état dans SubspaceLayout déclenchent une nouvelle mise en page.
  • Mise à jour optimisée de la chaîne de modificateurs pour mieux réutiliser les modificateurs existants.

Correction de bugs

  • Arrêt de l'écrêtage lorsqu'un SpatialDialog s'affiche. (Ic4594)
  • Les requêtes de redisposition effectuées lorsque les nœuds de modification sont dissociés sont désormais ignorées.
  • Suppression des phases de redisposition déclenchées par les modificateurs Movable et Resizable.
  • Correction d'un plantage dans le composable MainPanel() qui se produisait lorsqu'une dimension était définie sur zéro, directement ou lors d'un calcul de mise en page, par exemple un calcul SpatialRow/SpatialColumn. Le panneau sera désormais masqué. Notez que ce correctif concerne spécifiquement les plantages lors de la phase de mise en page. La redimensionnement du panneau à zéro via une interaction utilisateur sera géré séparément. Le panneau masqué manque d'affordances d'interface utilisateur.
  • Correction du problème lié à maintainAspectRatio à partir du modificateur redimensionnable. Le format devrait être conservé.
  • Correction d'un problème lié aux sous-espaces imbriqués, qui étaient mal positionnés pour un seul frame.
  • Correction d'un problème qui empêchait parfois l'application des coins arrondis.
  • NestedSubspaces n'apparaîtra plus pour un seul frame au mauvais endroit.

Version 1.0.0-alpha03

26 février 2025

Publication d'androidx.xr.compose:compose:1.0.0-alpha03 et d'androidx.xr.compose:compose-testing:1.0.0-alpha03 sans modification notable par rapport à la dernière version alpha. La version 1.0.0-alpha03 contient ces commits.

Version 1.0.0-alpha02

12 février 2025

Publication d'androidx.xr.compose:compose:1.0.0-alpha02 et d'androidx.xr.compose:compose-testing:1.0.0-alpha02. La version 1.0.0-alpha02 contient ces commits.

Nouvelles fonctionnalités

  • Le panneau d'activités peut désormais masquer son contenu lorsqu'une boîte de dialogue spatiale est activée.
  • L'API Orbiter est désormais utilisable dans les contextes SubspaceComposable et associe les orbiteurs à leur parent composable SubspaceLayout le plus proche.
  • Ajout de LayoutCoordinatesAwareModifierNode pour permettre les modificateurs personnalisés basés sur le positionnement.
  • Ajout de méthodes de cycle de vie d'attachement/de détachement à SubspaceModifier.Node.
  • Ajout de scaleWithDistance au modificateur mobile. Lorsque scaleWithDistance est activé, l'élément d'espace sous-jacent déplacé augmente ou diminue. Il conserve également toute échelle explicite qu'il avait avant le mouvement.

Modifications apportées à l'API

  • SessionCallbackProvider a été supprimé et remplacé par SpatialCapabilities.

Autres modifications

  • Réduction de minSDK à 24. Toutes les API Jetpack XR continuent de nécessiter l'API 34 au moment de l'exécution.
  • Les constructeurs Orbiter EdgeOffset.inner, EdgeOffset.outer et EdgeOffset.overlap ne sont plus des méthodes @Composable, ce qui leur permet d'être utilisés dans des contextes non composables.
  • Mise à jour des niveaux d'élévation spatiale pour qu'ils correspondent aux dernières spécifications de l'expérience utilisateur.
  • Implémentez l'interface SubspaceSemanticsInfo dans MeasurableLayout.
  • Changement de nom : SubspaceModifierElement devient SubspaceModifierNodeElement.

Corrections de bugs

  • Correctifs pour stabiliser la commande SubspaceModifier. SubspaceModifier devrait se comporter de manière plus fiable. Les modificateurs de décalage, de rotation, de mise à l'échelle, de mobilité et de redimensionnement devraient désormais être utilisables dans n'importe quel ordre.

Version 1.0.0-alpha01

12 décembre 2024

Publication d'androidx.xr.compose:compose-*1.0.0-alpha01.

Fonctionnalités de la version initiale

  • Version initiale de Jetpack Compose for XR pour les développeurs. Utilisez des concepts Compose familiers tels que les lignes et les colonnes pour créer des mises en page d'interface utilisateur spatiales dans XR, que vous portiez une application 2D existante vers XR ou que vous créiez une application XR à partir de zéro. Cette bibliothèque fournit des composables spatiaux et sous-espaces, tels que des panneaux et des orbiteurs spatiaux, qui vous permettent de placer votre UI 2D Compose ou basée sur Views existante dans une mise en page spatiale. Il introduit le composable de sous-espace Volume, qui vous permet de placer des entités SceneCore, telles que des modèles 3D, par rapport à votre UI. Pour en savoir plus, consultez ce guide du développeur:

    • Subspace: ce composable peut être placé n'importe où dans la hiérarchie de l'UI de votre application. Vous pouvez ainsi gérer les mises en page pour l'UI 2D et l'UI spatiale sans perdre de contexte entre les fichiers. Cela permet de partager plus facilement des éléments tels que l'architecture d'application existante entre la RA et d'autres facteurs de forme, sans avoir à hisser l'état dans l'ensemble de l'arborescence de l'UI ni à réarchitecturer votre application.

    • SpatialPanel: un panneau spatial est un composable de sous-espace qui vous permet d'afficher le contenu de l'application. Par exemple, vous pouvez afficher la lecture vidéo, des images fixes ou tout autre contenu dans un panneau spatial.

    • Orbiteur: un orbiteur est un composant d'interface utilisateur spatial. Il est conçu pour être associé à un panneau spatial correspondant et contient des éléments de navigation et d'action contextuelle liés à ce panneau spatial. Par exemple, si vous avez créé un panneau spatial pour afficher du contenu vidéo, vous pouvez ajouter des commandes de lecture vidéo dans un orbiteur.

    • Volume: placez les entités SceneCore, telles que les modèles 3D, par rapport à votre UI.

  • Mise en page spatiale : vous pouvez créer plusieurs panneaux spatiaux et les placer dans une mise en page spatiale à l'aide de SpatialRow, SpatialColumn, SpatialBox et SpatialLayoutSpacer. Utilisez des SubspaceModifier pour personnaliser votre mise en page.

  • Composants d'interface utilisateur spatiale: ces éléments peuvent être réutilisés dans votre interface utilisateur 2D. Leurs attributs spatiaux ne seront visibles que lorsque les fonctionnalités spatiales seront activées.

    • SpatialDialog: le panneau recule légèrement en profondeur pour afficher une boîte de dialogue surélevée.
    • SpatialPopUp: le panneau est légèrement repoussé en arrière dans la profondeur de champ pour afficher un pop-up surélevé.
    • SpatialElevation: SpatialElevationLevel peut être défini pour ajouter l'altitude.
  • SpatialCapabilities: les fonctionnalités spatiales peuvent changer à mesure que les utilisateurs interagissent avec votre application ou le système, ou même être modifiées par votre application elle-même (par exemple, en passant en mode Home Space ou Full Space). Pour éviter les problèmes, votre application doit rechercher LocalSpatialCapabilities.current pour déterminer quelles API sont compatibles avec l'environnement actuel. isSpatialUiEnabled: Éléments d'interface utilisateur spatialisée (par exemple, SpatialPanel) isContent3dEnabled: Objets 3D isAppEnvironmentEnabled: Environnement isPassthroughControlEnabled: Indique si l'application peut contrôler l'état de passthrough isSpatialAudioEnabled: Son spatialisé

Problèmes connus

  • Actuellement, un SDK minimal de 30 est requis pour utiliser Jetpack Compose pour XR. Pour contourner ce problème, vous pouvez ajouter l'entrée de fichier manifeste <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> suivante afin de pouvoir compiler et exécuter avec un SDK min de 23.
  • Les applications Jetpack XR doivent actuellement demander l'autorisation android.permission.SCENE_UNDERSTANDING dans le fichier AndroidManifest.
  • Lorsqu'une application se lance directement en mode d'affichage complet à l'aide de la propriété PROPERTY_XR_ACTIVITY_START_MODE dans son fichier manifeste, les activités/applications sont initialement ouvertes dans l'espace d'accueil avant de passer en mode d'affichage complet.
  • Les glTF dans les composables de volume peuvent initialement clignoter au mauvais endroit.
  • L'utilisation d'un SpatialDialog dans un panneau qui a été déplacé de manière importante entraînera un décalage du contenu dans la mauvaise direction.