Jetpack Compose na potrzeby 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ą.
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-alpha04
i androidx.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 typomSubspaceModifier
dostęp do wartości lokalnych kompozycji. - Dodano nowy interfejs API
SpatialPanel
, który stosuje styl implementacjiAndroidView
i wycofuje poprzedniViewBased 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 opcjonalnyVolumeConstraints
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 widzeniaSpatialUser
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łaniaonMoveStart
ionMoveEnd
. Funkcje zwrotneonMoveStart
ionMoveEnd
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 jakSpatialRow
iSpatialPanel
. Aby debugować drzewa kompozycji przestrzennej, użyj zamiast tego funkcjiSubspaceModifier.testTag
. - Usunięto nieobsługiwane przeciążenie funkcji
SpatialPopup
, która ma tylkospatialElevationLevel
icontent
. Użyj interfejsu, który obsługujeonDimissRequest
. - Funkcja
onPoseChange
wywoływana z poziomu modyfikatora Movable została usunięta. Zamiast tego użyjonMove
. 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 interfejsySpatialRow
iSpatialCurvedRow
. Jeśli wcześniej używasz parametruSpatialRow
curveRadius
, użyj teraz parametruSpatialCurvedRow
, który działa tak samo. MainPanel
iActivityPanel
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-alpha03
i androidx.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-alpha02
i androidx.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 kontekstachSubspaceComposable
. Dodatki Orbiter będą przyłączane do najbliższego elementu nadrzędnego typu composable opartego naSubspaceLayout
. - 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 opcjascaleWithDistance
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 elementemSpatialCapabilities
.
Inne zmiany
- Zmniejszono wartość
minSDK
do 24. Wszystkie interfejsy Jetpack XR nadal wymagają interfejsu API 34 w czasie wykonywania. - Konstruktory
Orbiter
,EdgeOffset.inner
,EdgeOffset.outer
iEdgeOffset.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
doMeasurableLayout
. - Nazwa
SubspaceModifierElement
została zmieniona naSubspaceModifierNodeElement
.
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
,SpatialBox
iSpatialLayoutSpacer
. Aby dostosować układ, użyjSubspaceModifier
.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.