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

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

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

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

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

Хотя SpatialPanel являются частью библиотеки Jetpack Compose for XR, они также принимают представления. При использовании setSubspaceContent в MainActivity поместите существующее представление в SpatialPanel , как показано в следующем примере.

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

Используйте Android Views и API совместимости Compose.

Обратитесь к руководству по совместимости между Views и Compose . Эта документация описывает совместное использование этих платформ и содержит ссылки на примеры кода, которые вы можете использовать.

Используйте ComposeView для добавления пространственных панелей и орбитальных аппаратов к существующему фрагменту.

Используйте ComposeView в макете XML, чтобы добавлять составные элементы и создавать новый контент XR. Используйте [ ViewBinding ][ViewBinding] для вызова ComposeView в функции onCreateView .

Узнайте больше о руководстве 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
   }
}

Работайте напрямую с библиотекой Jetpack SceneCore.

Compose for XR построен на основе Jetpack SceneCore . Если вы пространственно определяете приложение на основе представлений, вы можете продолжать использовать существующий код пользовательского интерфейса в Compose для XR или вместо этого выбрать прямую работу с Session Jetpack SceneCore.

Вы можете создавать панели непосредственно из SceneCore, используя PanelEntity . Сделайте панели подвижными или изменяющими их размер с помощью компонентов. Дополнительные сведения см. в разделе Добавление общего поведения к сущностям .

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