Разработка пользовательского интерфейса для приложений на базе Android Views

Попробуйте способ «Композиции»
Jetpack Compose с использованием Jetpack XR SDK — рекомендуемый набор инструментов пользовательского интерфейса для Android XR.

Использование фреймворка Android Jetpack Compose — лучший способ воспользоваться новейшими достижениями в разработке пользовательского интерфейса Android и убедиться, что ваше приложение соответствует лучшим отраслевым практикам.

Однако если вы еще не выполнили миграцию и работаете над пространственным размещением приложения на базе Android Views , есть несколько подходов, которые вы можете использовать.

Повторно используйте существующие представления в SpatialPanels

Хотя элементы SpatialPanel входят в библиотеку Jetpack Compose для XR, они также поддерживают View. При использовании Subspace в MainActivity поместите существующее View в 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-макете для добавления компонуемых элементов и создания нового XR-контента. Используйте привязку View или 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 для XR создан на основе Jetpack SceneCore . Если вы пространственно интерпретируете приложение на основе Views, вы можете продолжать использовать существующий код пользовательского интерфейса в Compose для 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" )