Das Android XR SDK ist jetzt in der Entwicklervorschau verfügbar. Wir freuen uns über Ihr Feedback!
Auf unserer Supportseite können Sie sich an uns wenden.
Ihrer App einen Unterbereich hinzufügen
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Ein Unterraum ist eine Partition des 3D-Raums in Ihrer App, in der Sie 3D-Modelle platzieren, 3D-Layouts erstellen und ansonsten 2D-Inhalten Tiefe verleihen können. Ein Unterraum wird nur gerendert, wenn die Spatialisierung aktiviert ist. Im Zuhausebereich oder auf Nicht-XR-Geräten wird jeglicher Code in diesem Unterbereich ignoriert.
Sie können Subraum-Kompositionen wie Volume
und SpatialPanel
zum Platzieren von 3D‑Modellen verwenden. Einige XR-Komponenten wie Orbiter
oder SpatialDialog
sind standardmäßige 2D-Kompositionen, die überall in der 2D-UI-Hierarchie verwendet werden können. SubspaceComposable
s müssen jedoch im Unterraum Ihrer App aufgerufen werden. Verwenden Sie dazu entweder das ApplicationSubspace
- oder das Subspace
-Kompositelement.
Wie der Name schon sagt, sollte das ApplicationSubspace
-Komposit alle ortsbezogenen Inhalte Ihrer App enthalten. Das Subspace
-Element eignet sich ideal, um eine Partition des 3D-Raums tiefer in der vorhandenen UI-Hierarchie Ihrer App einzubetten.
Wie bei allen anderen Composeable-Elementen können Sie Subspace
direkt in Ihrer 2D-UI-Hierarchie aufrufen. Es ist jedoch wichtig, sich der Auswirkungen bewusst zu sein, die sich daraus ergeben, wo in der Hierarchie Sie Subspace
aufrufen.
Unterraumhierarchien
Der Subspace auf oberster Ebene ist der äußerste Subspace, der von Ihrer App aufgerufen wird. Verwenden Sie das ApplicationSubspace
-Komposit für den Subspace auf oberster Ebene. Wenn Sie in Ihrer App jedoch nur das Subspace-Komposit verwenden, ist das äußerste Subspace
-Komposit der Subspace auf oberster Ebene. Dieser untergeordnete Bereich der obersten Ebene ist standardmäßig durch den empfohlenen Bereich für die Anzeige einer App begrenzt. Dort platzieren Sie in der Regel das räumliche Layout und die SpatialPanel
Ihrer App. Wenn Sie die Grenzen des untergeordneten Elements der obersten Ebene ändern möchten, übergeben Sie eine andere VolumeConstraints
an ApplicationSubspace
.
Wenn Sie jedoch einen anderen Unterraum in einer 2D-UI-Hierarchie in einem Bereich verschachteln, der sich im übergeordneten Unterraum befindet, verhält sich dieser verschachtelte Unterraum anders.
Verschachtelte Unterräume unterscheiden sich in zwei wichtigen Punkten von Subspace
auf oberster Ebene:
- Sie werden im 2D-Layout verwendet, in dem sie aufgerufen werden. Das bedeutet, dass die Höhe und Breite des Unterraums durch die Höhe und Breite des übergeordneten 2D-Layouts begrenzt wird.
- Sie verhalten sich wie untergeordnete Elemente der Entität, in der sie aufgerufen werden. Wenn Sie also ein
Subspace
-kompositives Element aufrufen, das in einem SpatialPanel
verschachtelt ist, ist dieser Unterraum ein untergeordnetes Element des SpatialPanel
, in dem es aufgerufen wird.
Diese Verhaltensweisen verschachtelter Unterbereiche ermöglichen Funktionen wie:
- Untergeordnete Entität mit der übergeordneten Entität verschieben
- Standort des Kindes mit dem Offset verschieben
SubspaceModifier
- Ein 3D‑Objekt präsentieren, das über der 2D‑Benutzeroberfläche schwebt und der Höhe und Breite des entsprechenden Bereichs im 2D‑Layout entspricht
Ihrer App einen Unterbereich hinzufügen
Im folgenden Codebeispiel wird gezeigt, wie Sie Ihrer App übergeordnete und verschachtelte Unterbereiche hinzufügen:
setContent {
// This is a top-level subspace
ApplicationSubspace {
SpatialPanel {
MyComposable()
}
}
}
@Composable
private fun MyComposable() {
Row {
PrimaryPane()
SecondaryPane()
}
}
@Composable
private fun PrimaryPane() {
// This is a nested subspace, because PrimaryPane is in a SpatialPanel
// and that SpatialPanel is in a top-level Subspace
Subspace {
ObjectInAVolume(true)
}
}
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-08-30 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-08-30 (UTC)."],[],[],null,["A subspace is a partition of 3D space within your app where you can place 3D\nmodels, build 3D layouts, and add depth to otherwise 2D content. A subspace is\nrendered only when spatialization is enabled. In Home Space or on non-XR\ndevices, any code within that subspace is ignored.\n\nYou can use subspace composables such as [`Volume`](/reference/kotlin/androidx/xr/compose/subspace/package-summary#Volume(androidx.xr.compose.subspace.layout.SubspaceModifier,kotlin.Function1)) and [`SpatialPanel`](/reference/kotlin/androidx/xr/compose/subspace/package-summary#SpatialPanel(androidx.xr.compose.subspace.layout.SubspaceModifier,androidx.xr.compose.subspace.layout.SpatialShape,kotlin.Function0))\nfor placing 3D models. Some XR components such as [`Orbiter`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#Orbiter(androidx.xr.compose.spatial.ContentEdge.Horizontal,androidx.compose.ui.unit.Dp,androidx.xr.compose.spatial.OrbiterOffsetType,androidx.compose.ui.Alignment.Horizontal,androidx.xr.compose.subspace.layout.SpatialShape,androidx.compose.ui.unit.Dp,kotlin.Boolean,kotlin.Function0)) or\n[`SpatialDialog`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#SpatialDialog(kotlin.Function0,androidx.xr.compose.spatial.SpatialDialogProperties,kotlin.Function0)) are standard 2D composables that can be used anywhere in\nyour 2D UI hierarchy, but [`SubspaceComposable`](/reference/kotlin/androidx/xr/compose/subspace/SubspaceComposable)s must be invoked in your\napp's subspace. To do this, use either the `ApplicationSubspace` composable or\nthe [`Subspace`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#Subspace(kotlin.Function1)) composable.\n\nAs the name suggests, the [`ApplicationSubspace`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#ApplicationSubspace(androidx.xr.compose.unit.VolumeConstraints,androidx.xr.compose.spatial.ConstraintsBehavior,kotlin.Function1)) composable should contain\nall of your app's spatialized content. The [`Subspace`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#Subspace(kotlin.Function1)) composable is ideal\nfor nesting a partition of 3D space deeper in your app's existing UI hierarchy.\n\nAs with any other composable, you can call [`Subspace`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#Subspace(kotlin.Function1)) directly in your 2D\nUI hierarchy. However, it's important to be aware of the implications of where\nin the hierarchy you invoke [`Subspace`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#Subspace(kotlin.Function1)).\n\nAbout subspace hierarchies\n\nThe top-level subspace is the outermost subspace invoked by your app. Use the\n[`ApplicationSubspace`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#ApplicationSubspace(androidx.xr.compose.unit.VolumeConstraints,androidx.xr.compose.spatial.ConstraintsBehavior,kotlin.Function1)) composable for your top-level subspace, but, if you\nonly use the Subspace composable in your app, the outermost `Subspace`\ncomposable will be your top-level subspace. By default, this top-level subspace\nis bounded by the recommended space for viewing an app, and it's typically where\nyou place your app's spatial layout and [`SpatialPanel`](/reference/kotlin/androidx/xr/compose/subspace/package-summary#SpatialPanel(androidx.xr.compose.subspace.layout.SubspaceModifier,androidx.xr.compose.subspace.layout.SpatialShape,kotlin.Function0)). If you need to\nchange the bounds of the top-level subspace, pass different\n[`VolumeConstraints`](/reference/kotlin/androidx/xr/compose/unit/VolumeConstraints) to your [`ApplicationSubspace`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#ApplicationSubspace(androidx.xr.compose.unit.VolumeConstraints,androidx.xr.compose.spatial.ConstraintsBehavior,kotlin.Function1)).\n\nHowever, if you nest another subspace inside of a 2D UI hierarchy in a panel\nthat's contained in the top-level subspace, that nested subspace behaves\ndifferently.\n\nNested subspaces have two key differences from top-level [`Subspace`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#Subspace(kotlin.Function1)):\n\n- They participate in the 2D layout in which they are invoked. This means that the height and width of the subspace will be constrained by the height and width of its 2D parent layout.\n- They behave as children of the entity they're invoked in. This means that, if you call a [`Subspace`](/reference/kotlin/androidx/xr/compose/spatial/package-summary#Subspace(kotlin.Function1)) composable nested inside of a [`SpatialPanel`](/reference/kotlin/androidx/xr/compose/subspace/package-summary#SpatialPanel(androidx.xr.compose.subspace.layout.SubspaceModifier,androidx.xr.compose.subspace.layout.SpatialShape,kotlin.Function0)), that subspace is a child of the [`SpatialPanel`](/reference/kotlin/androidx/xr/compose/subspace/package-summary#SpatialPanel(androidx.xr.compose.subspace.layout.SubspaceModifier,androidx.xr.compose.subspace.layout.SpatialShape,kotlin.Function0)) it's called in.\n\nThese behaviors of nested subspace enable capabilities such as:\n\n- Moving the child with the parent entity\n- Offsetting the location of the child using the offset [`SubspaceModifier`](/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier)\n- Presenting a 3D object that hovers above your 2D UI and matches the height and width of the appropriate space in the 2D layout\n\nAdd a subspace to your app\n\nThe following code example shows how to add top-level and nested subspaces to\nyour app:\n\n\n```kotlin\nsetContent {\n // This is a top-level subspace\n ApplicationSubspace {\n SpatialPanel {\n MyComposable()\n }\n }\n}https://github.com/android/snippets/blob/f95ab59fad80aeaf5d6a90bab8a01a126f20f44e/xr/src/main/java/com/example/xr/compose/Subspace.kt#L34-L41\n```\n\n\u003cbr /\u003e\n\n\n```kotlin\n@Composable\nprivate fun MyComposable() {\n Row {\n PrimaryPane()\n SecondaryPane()\n }\n}\n\n@Composable\nprivate fun PrimaryPane() {\n // This is a nested subspace, because PrimaryPane is in a SpatialPanel\n // and that SpatialPanel is in a top-level Subspace\n Subspace {\n ObjectInAVolume(true)\n }\n}https://github.com/android/snippets/blob/f95ab59fad80aeaf5d6a90bab8a01a126f20f44e/xr/src/main/java/com/example/xr/compose/Subspace.kt#L47-L62\n```\n\n\u003cbr /\u003e"]]