Tworzenie interfejsu użytkownika w przypadku aplikacji opartych na widokach Androida

Wypróbuj tworzenie wiadomości
Jetpack Compose z pakietem Jetpack XR SDK to zalecany zestaw narzędzi interfejsu dla Androida XR.

Korzystanie z ramy Jetpack Compose na Androida to najlepszy sposób na wykorzystanie najnowszych osiągnięć w zakresie tworzenia interfejsu użytkownika na Androida i utrzymanie aplikacji na bieżąco ze sprawdzonymi metodami branżowymi.

Jeśli jednak nie przeprowadziłeś migracji i pracujesz nad przestrzennym wyświetlaniem aplikacji na Androida opartej na Views, możesz zastosować kilka metod.

Ponowne wykorzystanie dotychczasowych widoków w ramach paneli przestrzennych

Chociaż SpatialPanel są częścią biblioteki Jetpack Compose for XR, obsługują też widoki. Jeśli używasz w MainActivity widoku setSubspaceContent, umieść istniejący widok w SpatialPanel, jak pokazano w tym przykładzie.

setSubspaceContent {
   SpatialPanel(
       view = MyCustomView(this),
       modifier = SubspaceModifier.height(500.dp).width(500.dp).depth(25.dp)
   )
}

Korzystanie z interfejsów API Androida Views i Compose do zapewnienia interoperacyjności

Zapoznaj się ze wskazówkami dotyczącymi interoperacyjności między widokami a komponentami Compose. Ta dokumentacja zawiera informacje o współużywaniu tych platform oraz linki do przykładowych fragmentów kodu, których możesz użyć.

Dodawanie paneli przestrzennych i orbiterów do istniejącego fragmentu za pomocą funkcji ComposeView

Użyj elementu ComposeView w układzie XML, aby dodać elementy składane i utworzyć nowe treści XR. Aby wywołać funkcję ComposeView w funkcji onCreateView, użyj wyrażenia [ViewBinding][ViewBinding].

Więcej informacji o wskazówkach dotyczących ComposeView

override fun onCreateView(
   inflater: LayoutInflater,
   container: ViewGroup?,
   savedInstanceState: Bundle?
): View {
   val view = inflater.inflate(R.layout.fragment_first, container, false)
   val composeView = view.findViewById<ComposeView>(R.id.compose_view)
   composeView.apply {
       // Dispose of the Composition when the view's LifecycleOwner
       // is destroyed
       setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
       setContent {
           // In Compose world
           Orbiter(
               position = Edge.Top,
               offset = 10.dp,
               alignment = Alignment.End
           ) {
               SpatialPanel(SubspaceModifier.height(500.dp).width(500.dp)) {
                   Text("Spatial Panel with Orbiter")
               }
           }
       }
       return view
   }
}

Praca bezpośrednio z biblioteką Jetpack SceneCore

Compose for XR opiera się na Jetpacku SceneCore. Jeśli chcesz użyć dźwięku przestrzennego w aplikacji opartej na Views, możesz nadal używać dotychczasowego kodu interfejsu użytkownika w Compose for XR lub pracować bezpośrednio z Session Jetpacka SceneCore.

Panele możesz tworzyć bezpośrednio w SceneCore za pomocą PanelEntity. Używając komponentów, możesz zmieniać położenie paneli lub ich rozmiar. Więcej informacji znajdziesz w artykule Dodawanie typowych zachowań do entyfikacji.

val panelContent = MyCustomView(this)
val panelEntity = xrSession.createPanelEntity(
   panelContent,
   surfaceDimensionsPx = Dimensions(500f,500f,500f),
   dimensions = Dimensions(1f,1f,1f),
   name = "panel entity"
)