使用 Android Jetpack Compose 框架是充分利用 Android 界面开发最新进展并确保您的应用符合行业最佳实践的最佳方式。
但是,如果您尚未迁移,并且正在对基于 Android Views 的应用进行空间化处理,您可以采用以下几种方法。
在 SpatialPanel 中重用现有 View
虽然 SpatialPanel
是 Jetpack Compose for XR 库的一部分,但它们也接受 View。在 MainActivity 中使用 setSubspaceContent()
时,将现有视图放入 SpatialPanel
中,如以下示例所示。
setContent { Subspace { SpatialPanel( modifier = SubspaceModifier.height(500.dp).width(500.dp).depth(25.dp) ) { MyCustomView(this@ActivityWithSubspaceContent) } } }
使用 Android Views 和 Compose 互操作性 API
请查阅有关 Views 和 Compose 之间互操作性的指南。本文档介绍了如何结合使用这些框架,并提供了可供您使用的代码示例链接。
使用 ComposeView 向现有 fragment 添加空间面板和轨道器
在 XML 布局中使用 ComposeView
来添加 Composables 并创建新的 XR 内容。使用 视图绑定或 findViewById
在 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 之上。如果您正在对基于 View 的应用进行空间化处理,则可以继续在 Compose for XR 中使用现有界面代码,或者选择直接使用 Jetpack SceneCore 的 Session
。
您可以使用 PanelEntity
直接从 SceneCore 构建面板。使用 Dimensions
以米为单位设置面板大小,或使用 PixelDimensions
以像素为单位设置面板大小。您可以通过使用相应的组件来选择使面板可移动或可调整大小。如需了解详情,请参阅向实体添加常见行为。
val panelContent = MyCustomView(this) val panelEntity = PanelEntity.create( session = xrSession, view = panelContent, pixelDimensions = PixelDimensions(500, 500), name = "panel entity" )