SpatialPanel 是一种子空间可组合项,可让您显示应用的内容,例如,您可以在空间面板中显示视频播放、静态图片或任何其他内容。
您可以使用 SubspaceModifier 更改空间面板的大小、行为和位置
创建空间面板
以下示例展示了如何创建空间面板。
Subspace { SpatialPanel( SubspaceModifier .height(824.dp) .width(1400.dp) .movable() .resizable(), ) { SpatialPanelContent() } }
@Composable fun SpatialPanelContent() { Box( Modifier .background(color = Color.Black) .height(500.dp) .width(500.dp), contentAlignment = Alignment.Center ) { Text( text = "Spatial Panel", color = Color.White, fontSize = 25.sp ) } }
代码要点
- 由于
SpatialPanelAPI 是子空间可组合项,因此您必须在Subspace中调用它们。在子空间之外调用它们会抛出异常。 SpatialPanel的大小已使用SubspaceModifier上的height和width规范进行设置。如果省略这些规范,面板的大小将由其内容的尺寸决定。- 通过添加
movable子空间修饰符,允许用户移动面板。 - 通过添加
resizable子空间修饰符,允许用户调整面板大小。 - 如需详细了解尺寸和定位,请参阅我们的空间面板设计指南。如需详细了解代码实现,请参阅我们的参考文档。
movable 修饰符的工作原理
当用户将面板移离自己时,默认情况下,movable 修饰符会缩放面板,其方式与系统在主屏幕空间中调整面板大小的方式类似。所有子级内容都会继承此行为。如需停用此功能,请将 shouldScaleWithDistance 参数设置为 false。
向空间布局添加多个空间面板
您可以使用 SpatialRow、SpatialColumn、SpatialBox 和 SpatialSpacer 创建多个空间面板,并将其放置在空间布局中。
以下代码示例展示了如何执行此操作。
Subspace { SpatialRow { SpatialColumn { SpatialPanel(SubspaceModifier.height(250.dp).width(400.dp)) { SpatialPanelContent("Top Left") } SpatialPanel(SubspaceModifier.height(200.dp).width(400.dp)) { SpatialPanelContent("Middle Left") } SpatialPanel(SubspaceModifier.height(250.dp).width(400.dp)) { SpatialPanelContent("Bottom Left") } } SpatialColumn { SpatialPanel(SubspaceModifier.height(250.dp).width(400.dp)) { SpatialPanelContent("Top Right") } SpatialPanel(SubspaceModifier.height(200.dp).width(400.dp)) { SpatialPanelContent("Middle Right") } SpatialPanel(SubspaceModifier.height(250.dp).width(400.dp)) { SpatialPanelContent("Bottom Right") } } } }
@Composable fun SpatialPanelContent(text: String) { Column( Modifier .background(color = Color.Black) .fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Text( text = "Panel", color = Color.White, fontSize = 15.sp ) Text( text = text, color = Color.White, fontSize = 25.sp, fontWeight = FontWeight.Bold ) } }
代码要点
SpatialRow、SpatialColumn、SpatialBox和SpatialSpacer都是子空间可组合项,必须放置在子空间内。- 使用
SubspaceModifier自定义布局。 - 对于一行中包含多个面板的布局,我们建议使用
SubspaceModifier设置 825dp 的曲线半径,以便面板环绕用户。如需了解详情,请参阅我们的设计指南。
创建自定义面板和布局
如需创建 Compose for XR 不支持的自定义面板,您可以使用 SceneCore API 直接处理 PanelEntity 实例和场景图。