Использование фреймворка Android Jetpack Compose – лучший способ воспользоваться преимуществами последних достижений в разработке пользовательского интерфейса Android и убедиться, что ваше приложение соответствует лучшим отраслевым практикам.
Однако если вы ещё не перешли на него и хотите добавить пространственные функции в приложение на основе Android Views, вы можете воспользоваться одним из описанных ниже подходов.
Повторное использование существующих представлений в SpatialPanel
Хотя SpatialPanel входит в библиотеку Jetpack Compose for XR, он также принимает представления. При использовании Subspace в MainActivity поместите существующее представление в SpatialPanel, как показано в примере ниже.
setContent { Subspace { SpatialPanel( modifier = SubspaceModifier.height(500.dp).width(500.dp).depth(25.dp) ) { MyCustomView(this@ActivityWithSubspaceContent) } } }
Как использовать API совместимости Android Views и Compose
Ознакомьтесь с руководством по совместимости Views и Compose. В этой документации рассказывается, как использовать эти фреймворки вместе, и приводятся ссылки на примеры кода.
Как использовать ComposeView, чтобы добавить пространственные панели и орбитеры в существующий фрагмент
Используйте ComposeView в макете XML, чтобы добавлять composable-функции и создавать контент для расширенной реальности. Используйте View binding или findViewById, чтобы найти ComposeView в функции onCreateView().
Подробнее о рекомендациях по работе с ComposeView…
override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { val view = inflater.inflate(R.layout.example_fragment, container, false) view.findViewById<ComposeView>(R.id.compose_view).apply { // Dispose of the Composition when the view's LifecycleOwner // is destroyed setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { // In Compose world SpatialPanel(SubspaceModifier.height(500.dp).width(500.dp)) { Text("Spatial Panel with Orbiter") } } } return view }
Работа с библиотекой Jetpack SceneCore напрямую
Compose for XR основан на Jetpack SceneCore. Если вы добавляете пространственные функции в приложение на основе представлений, вы можете продолжить использовать существующий код пользовательского интерфейса в Compose for XR или работать напрямую с Session Jetpack SceneCore.
Вы можете создавать панели непосредственно из SceneCore с помощью PanelEntity. Задайте размер панели в метрах с помощью dimensions или в пикселях с помощью pixelDimensions. Вы можете сделать панели перемещаемыми или изменяемыми по размеру, используя соответствующие компоненты. Подробнее о том, как добавить объектам общее поведение…
val panelContent = MyCustomView(this) val panelEntity = PanelEntity.create( session = xrSession, view = panelContent, pixelDimensions = IntSize2d(500, 500), name = "panel entity" )