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

Поддерживаемые XR-устройства
Это руководство поможет вам создавать контент для таких устройств.
XR-шлемы
Проводные XR-очки

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

Однако, если вы ещё не перешли на Compose и работаете над пространственным приложением на основе Android Views, есть несколько подходов, которые вы можете использовать.

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

SpatialPanels входят в библиотеку Jetpack Compose для XR, но также поддерживают Views. При использовании 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, чтобы добавлять Composables и создавать новый контент XR. Используйте Показать привязку или 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 для 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"
)