Jetpack Compose na potrzeby XR

Tworzenie deklaratywnie układów UI przestrzennego, które korzystają z możliwości przestrzennych Androida XR.
Ostatnia aktualizacja Wersja stabilna Wersja kandydująca do publikacji Wersja Beta Wersja alfa
7 maja 2025 r. - - - 1.0.0-alpha04

Deklarowanie zależności

Aby dodać zależność od XR Compose, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven firmy Google.

Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle aplikacji lub modułu:

Odlotowe

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

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Opinia

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz zagłosować na istniejący problem, klikając przycisk z gwiazdką.

Tworzenie nowego zgłoszenia

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 1.0

Wersja 1.0.0-alpha04

7 maja 2025 r.

androidx.xr.compose:compose:1.0.0-alpha04androidx.xr.compose:compose-testing:1.0.0-alpha04 są dostępne. Wersja 1.0.0-alpha04 zawiera te komisy.

Nowe funkcje

  • Dodano interfejs CompositionLocalConsumerSubspaceModifierNode, aby umożliwić niestandardowym typom SubspaceModifier dostęp do wartości lokalnych kompozycji.
  • Dodano nowy interfejs API SpatialPanel, który stosuje styl implementacji AndroidView i wycofuje poprzedni ViewBased SpatialPanel.
  • Dodano obiekt towarzyszący VolumeConstraints.Unbounded, który reprezentuje nieograniczone ograniczenia.
  • Dodano SubspaceModifier.onPointSourceParams, aby umożliwić przestrzenne źródło dźwięku.
  • Dodano publiczny ApplicationSubspace, który zawiera opcjonalny VolumeConstraints do definiowania obszaru 3D, na którym aplikacja może renderować treści przestrzenne. Domyślnie, jeśli nie zostaną określone żadne ograniczenia, podprzestrzeń będzie ograniczona do bieżącego pola widzenia SpatialUser w szerokości i wysokości. Użytkownicy mogą podać ograniczenia, które mają być używane, jeśli nie można określić pola widzenia. W przeciwnym razie używane są domyślne wartości szerokości i wysokości pola widzenia.
  • Dodano SpatialExternalSurface, które można wykorzystać do renderowania treści stereoskopowych. SpatialExternalSurface można dostosować za pomocą modyfikatorów (z wyjątkiem alfa) i efektu zaokrąglenia krawędzi.
  • Dodano nowy modyfikator pointerHoverIcon, który pozwala użytkownikom ustawić ikonę wskaźnika przestrzennego.

Zmiany w interfejsie API

  • Usunięto ograniczenie RequiresApi(34) we wszystkich pakietach Jetpack XR. To ograniczenie było zbędne, ponieważ Jetpack XR jest obecnie dostępny tylko na urządzeniach z poziomem interfejsu API 34 lub nowszym (Iae0f8).
  • Projekty opublikowane z Kotlin 2.0 wymagają KGP 2.0.0 lub nowszej wersji. (Idb6b5)
  • Obsługa przycisku Wstecz będzie teraz działać w panelach przestrzennych bez wbudowanych aktywności. Aby obsługa powrotu działała, musisz określić android:enableOnBackInvokedCallback="true" w pliku manifestu Androida.
  • Obsługa zwrotna będzie teraz działać w przypadku dialogów przestrzennych. Aby przetwarzanie wsteczne działało, musisz określić android:enableOnBackInvokedCallback="true" w pliku manifestu Androida.
  • Komponenty SpatialPanel oparte na tworzeniu i widoku mogą teraz dostosować rozmiar do zawartości.
  • Deweloperzy mogą teraz ustawiać własne wartości SpatialElevationLevel i nie są ograniczeni do wstępnie zdefiniowanych poziomów.
  • Poziom wysokości Orbitera można teraz dostosować za pomocą parametru elevation.
  • Subspace może być domyślnie ograniczony do pola widzenia SpatialUser w szerokości i wysokości. Jeśli nie można określić pola widzenia, używane są domyślne wartości szerokości i wysokości pola widzenia.
  • Do modyfikatora Movable dodano nowe wywołania onMoveStartonMoveEnd. Funkcje zwrotne onMoveStartonMoveEnd są wywoływane, gdy użytkownik rozpoczyna i kończy przenoszenie komponentu podprzestrzeni za pomocą modyfikatora ruchomości.
  • Parametr name został usunięty z interfejsów API dotyczących lokalizacji, takich jak SpatialRowSpatialPanel. Aby debugować drzewa kompozycji przestrzennej, użyj zamiast tego funkcji SubspaceModifier.testTag.
  • Usunięto nieobsługiwane przeciążenie funkcji SpatialPopup, która ma tylko spatialElevationLevel i content. Użyj interfejsu, który obsługuje onDimissRequest.
  • Funkcja onPoseChange wywoływana z poziomu modyfikatora Movable została usunięta. Zamiast tego użyj onMove.
  • SubspaceModifiers nie będą już miały wpływu, jeśli są odłączone lub są w trakcie odłączania.
  • Dotychczasowy interfejs API SpatialRow został podzielony na interfejsy SpatialRowSpatialCurvedRow. Jeśli wcześniej używasz parametru SpatialRow curveRadius, użyj teraz parametru SpatialCurvedRow, który działa tak samo.
  • MainPanelActivityPanel nie mają już pasków tytułów, gdy są uruchamiane na podobnym do najnowszego obrazie systemu.
  • Modyfikatory przezroczystości i skali można teraz stosować na siebie, a ich wartości będą mnożone, aby uzyskać ostateczną wartość przezroczystości lub skali.
  • Funkcja onPoseChange z modyfikatora Movable została zoptymalizowana pod kątem płynniejszego poruszania się pozą.
  • Modyfikatory umożliwiające zmianę położenia i rozmiaru będą teraz wykonywać swoje wywołania zwrotne w głównym wątku, aby zmiany stanu powodowały ponowne skompilowanie.
  • Dodano obserwację stanu w etapach układu i pomiarów, aby zapewnić, że zmiany stanu w SubspaceLayout będą powodować ponowne ułożenie.
  • Zoptymalizowane aktualizacje łańcucha modyfikatorów, które umożliwiają lepsze wykorzystanie dotychczasowych modyfikatorów.

Poprawki błędów

  • Przerwanie przeglądania po wyświetleniu SpatialDialog. (Ic4594)
  • Żądania dotyczące przeformatowania, które zostały przesłane, gdy węzły modyfikatorów były odłączone, będą teraz ignorowane.
  • Usunięto fazy przeprojektowania wywoływane przez modyfikatory Movable i Resizable.
  • Naprawiliśmy błąd w komponowalnym MainPanel(), który występował, gdy jedna z wymiarów była ustawiona na 0, bezpośrednio lub podczas obliczania układu, np. SpatialRow/SpatialColumn. Panel będzie teraz ukryty. Pamiętaj, że ta poprawka dotyczy tylko awarii podczas fazy układu. Zmiana rozmiaru panelu na zero przez użytkownika będzie obsługiwana osobno. Ukryty panel nie ma elementów interfejsu.
  • Rozwiązano problem z maintainAspectRatio z modyfikatora umożliwiającego zmianę rozmiaru. Proporcje powinny być teraz zachowane.
  • Rozwiązaliśmy problem z zagnieżdżonymi Subspaces, które były nieprawidłowo umieszczane w pojedynczym ujęciu.
  • Rozwiązaliśmy problem polegający na tym, że zaokrąglone rogi nie były stosowane w odpowiednich przypadkach.
  • NestedSubspaces nie będzie już pojawiać się w nieprawidłowym miejscu w żadnym ujęciu.

Wersja 1.0.0-alpha03

26 lutego 2025 r.

Wersje androidx.xr.compose:compose:1.0.0-alpha03androidx.xr.compose:compose-testing:1.0.0-alpha03 zostały wydane bez istotnych zmian od ostatniej wersji alfa. Wersja 1.0.0-alpha03 zawiera te komity

Wersja 1.0.0-alpha02

12 lutego 2025 r.

androidx.xr.compose:compose:1.0.0-alpha02androidx.xr.compose:compose-testing:1.0.0-alpha02 są dostępne. Wersja 1.0.0-alpha02 zawiera te komity.

Nowe funkcje

  • Panel aktywności może teraz przyciemnić zawartość, gdy włączony jest dialog przestrzenny.
  • Interfejs Orbiter API można teraz używać w kontekstach SubspaceComposable. Dodatki Orbiter będą przyłączane do najbliższego elementu nadrzędnego typu composable opartego na SubspaceLayout.
  • Wprowadziliśmy LayoutCoordinatesAwareModifierNode, aby umożliwić stosowanie niestandardowych modyfikatorów opartych na pozycjonowaniu.
  • Dodaliśmy do SubspaceModifier.Node metody cyklu życia dotyczące dołączania i odłączania.
  • Dodano scaleWithDistance do modyfikatora przenośnego. Gdy opcja scaleWithDistance jest włączona, przenoszony element podprzestrzeni zostanie powiększony lub zmniejszony. Zachowa też każdą skalę, którą miała przed przemieszczeniem.

Zmiany w interfejsie API

  • Usunięto SessionCallbackProvider i zastąpiono je elementem SpatialCapabilities.

Inne zmiany

  • Zmniejszono wartość minSDK do 24. Wszystkie interfejsy Jetpack XR nadal wymagają interfejsu API 34 w czasie wykonywania.
  • Konstruktory Orbiter, EdgeOffset.inner, EdgeOffset.outerEdgeOffset.overlap nie są już metodami @Composable, co pozwala na ich używanie w kontekstach nieskompozycyjnych.
  • Zaktualizuj poziomy dźwięku przestrzennego, aby pasowały do najnowszej specyfikacji UX.
  • Wdróż interfejs SubspaceSemanticsInfo do MeasurableLayout.
  • Nazwa SubspaceModifierElement została zmieniona na SubspaceModifierNodeElement.

Poprawki błędów

  • Poprawki mające na celu stabilizację SubspaceModifier. SubspaceModifier powinien działać bardziej niezawodnie. Modyfikatory przesunięcia, obracania, skalowania, przemieszczania i zmiany rozmiaru powinny być teraz dostępne w dowolnej kolejności.

Wersja 1.0.0-alpha01

12 grudnia 2024 r.

Element androidx.xr.compose:compose-*1.0.0-alpha01 został zwolniony.

Funkcje wersji początkowej

  • Pierwsza wersja Jetpack Compose dla deweloperów przeznaczona na XR. Używaj znanych koncepcji Compose, takich jak wiersze i kolumny, do tworzenia układów UI w XR, niezależnie od tego, czy przenosisz istniejące aplikacje 2D do XR, czy tworzysz nową aplikację XR od podstaw. Biblioteka ta zawiera komponenty do tworzenia aplikacji w przestrzeni i w przestrzeni 3D, takie jak panele 3D i orbitery, które umożliwiają umieszczanie dotychczasowego interfejsu użytkownika opartego na Compose 2D lub Views w układzie 3D. Wprowadza ona komponent podprzestrzeni Volume, który umożliwia umieszczanie elementów SceneCore, takich jak modele 3D, względem interfejsu użytkownika. Więcej informacji znajdziesz w tym przewodniku dla programistów:

    • Subspace: ten komponent można umieścić w dowolnym miejscu w hierarchii UI aplikacji, co umożliwia zachowanie układów interfejsu 2D i przestrzennego bez utraty kontekstu między plikami. Dzięki temu łatwiej jest udostępniać takie elementy jak istniejąca architektura aplikacji między XR a innymi formatami, bez konieczności przenoszenia stanu przez całe drzewo interfejsu użytkownika ani przeprojektowywania aplikacji.

    • SpatialPanel: panel przestrzenny to komponent podprzestrzeniowy, który umożliwia wyświetlanie treści aplikacji. Możesz na przykład wyświetlić odtwarzanie filmu, obrazy statyczne lub dowolne inne treści.

    • Orbiter: orbiter to przestrzenny element interfejsu. Jest ona przeznaczona do dołączania do odpowiedniego panelu przestrzennego i zawiera elementy nawigacji oraz działania kontekstowe powiązane z tym panelem. Jeśli na przykład utworzysz panel przestrzenny, aby wyświetlać treści wideo, możesz dodać elementy sterujące odtwarzaniem filmu w orbicie.

    • Objętość: umieszczanie elementów SceneCore, takich jak modele 3D, względem interfejsu.

  • Układ przestrzenny: możesz utworzyć wiele paneli przestrzennych i umieścić je w ramach układu przestrzennego za pomocą elementów SpatialRow, SpatialColumn, SpatialBoxSpatialLayoutSpacer. Aby dostosować układ, użyj SubspaceModifier.

  • Komponenty UI w przestrzeni: te elementy można ponownie wykorzystać w interfejsie 2D, a ich atrybuty przestrzenne będą widoczne tylko wtedy, gdy włączone są funkcje przestrzenne.

    • SpatialDialog: panel przesunie się nieco w głębi, aby wyświetlić wyskakujące okienko.
    • SpatialPopUp: panel przesunie się nieco w głębi, aby wyświetlić wyskakujące okienko.
    • SpatialElevation: można ustawić opcję SpatialElevationLevel, aby dodać wzniesienie.
  • SpatialCapabilities: możliwości przestrzenne mogą się zmieniać, gdy użytkownicy korzystają z aplikacji lub systemu, a nawet mogą być zmieniane przez samą aplikację – na przykład przez przejście do pokoju domowego lub pełnego pokoju. Aby uniknąć problemów, aplikacja musi sprawdzić wartość LocalSpatialCapabilities.current, aby określić, które interfejsy API są obsługiwane w bieżącym środowisku. isSpatialUiEnabled: elementy UI w przestrzeni (np.SpatialPanel), isContent3dEnabled: obiekty 3D, isAppEnvironmentEnabled: środowisko, isPassthroughControlEnabled: czy aplikacja może kontrolować stan przekazywania, isSpatialAudioEnabled: dźwięk przestrzenny.

Znane problemy

  • Obecnie do korzystania z Jetpack Compose na potrzeby XR wymagana jest minimalna wersja 30. Aby obejść ten problem, możesz dodać do pliku manifestu wpis <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>, aby móc skompilować i uruchomić aplikację z minSDK 23.
  • Aplikacje Jetpack XR wymagają obecnie w pliku AndroidManifest.xml ubiegania się o uprawnienie android.permission.SCENE_UNDERSTANDING.
  • Gdy aplikacja uruchamia się bezpośrednio w trybie pełnoekranowym za pomocą właściwości PROPERTY_XR_ACTIVITY_START_MODE w pliku manifestu, czynności lub aplikacje są początkowo otwierane w miejscu Home Space, a potem przechodzą do trybu pełnoekranowego.
  • Modele glTF w elementach składowych w tomach mogą początkowo migać w niewłaściwym miejscu.
  • Użycie SpatialDialog w panelu, który został przesunięty, spowoduje przesunięcie treści w niewłaściwym kierunku.