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