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

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

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

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

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

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

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

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

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

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

Используйте ComposeView в вашем XML-макете для добавления Composables и создания нового контента 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 for XR создан на основе Jetpack SceneCore . Если вы пространственно оформляете приложение на основе Views, вы можете продолжать использовать существующий код пользовательского интерфейса в Compose for XR или работать напрямую с Session Jetpack SceneCore.

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

val panelContent = MyCustomView(this)
val panelEntity = PanelEntity.create(
    session = xrSession,
    view = panelContent,
    pixelDimensions = PixelDimensions(500, 500),
    name = "panel entity"
)