Android XR SDK اکنون در پیش نمایش برنامه نویس در دسترس است. ما بازخورد شما را می خواهیم! برای ارتباط با ما به
صفحه پشتیبانی ما مراجعه کنید.
یک فضای فرعی به برنامه خود اضافه کنید
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
فضای فرعی پارتیشنی از فضای سه بعدی در برنامه شما است که می توانید مدل های سه بعدی را قرار دهید، طرح بندی های سه بعدی بسازید و به محتوای دو بعدی در غیر این صورت عمق دهید. یک فضای فرعی تنها زمانی ارائه می شود که فضایی سازی فعال باشد. در Home Space یا در دستگاههای غیر XR، هر کدی در آن زیرفضا نادیده گرفته میشود.
برای قرار دادن مدلهای سهبعدی میتوانید از قابلیتهای composable subspace مانند Volume
و SpatialPanel
استفاده کنید. برخی از مؤلفههای XR مانند Orbiter
یا SpatialDialog
قابلیتهای ترکیبپذیر دوبعدی استانداردی هستند که میتوانند در هر جایی از سلسلهمراتب UI دوبعدی شما استفاده شوند، اما SubspaceComposable
باید در فضای فرعی برنامهتان فراخوانی شود. برای این کار از ApplicationSubspace
composable یا Subspace
composable استفاده کنید.
همانطور که از نام آن پیداست، ApplicationSubspace
composable باید شامل تمام محتوای فضایی برنامه شما باشد. Subspace
composable برای قرار دادن پارتیشنی از فضای سه بعدی عمیق تر در سلسله مراتب رابط کاربری موجود برنامه شما ایده آل است.
مانند هر کامپوزیتی دیگری، میتوانید Subspace
مستقیماً در سلسله مراتب UI دوبعدی خود فراخوانی کنید. با این حال، مهم است که از پیامدهای این که در کجای سلسله مراتب Subspace
را فراخوانی می کنید، آگاه باشید.
درباره سلسله مراتب زیرفضا
زیرفضای سطح بالا، بیرونی ترین فضای فرعی است که توسط برنامه شما فراخوانی شده است. از ApplicationSubspace
قابل composable برای زیرفضای سطح بالای خود استفاده کنید، اما، اگر فقط از Subspace قابل composable در برنامه خود استفاده کنید، بیرونی ترین Subspace
قابل ترکیب، زیرفضای سطح بالای شما خواهد بود. بهطور پیشفرض، این زیرفضای سطح بالا با فضای توصیهشده برای مشاهده یک برنامه محدود میشود، و معمولاً جایی است که طرحبندی فضایی برنامه و SpatialPanel
قرار میدهید. اگر میخواهید محدودههای زیرفضای سطح بالا را تغییر دهید، VolumeConstraints
مختلف را به ApplicationSubspace
خود منتقل کنید.
با این حال، اگر فضای فرعی دیگری را در یک سلسله مراتب رابط کاربری دوبعدی در پانلی که در زیرفضای سطح بالا قرار دارد، قرار دهید، آن زیرفضای تو در تو متفاوت رفتار می کند.
فضاهای فرعی تو در تو دو تفاوت اساسی با Subspace
سطح بالا دارند:
- آنها در طرح دو بعدی که در آن فراخوانی می شوند شرکت می کنند. این بدان معنی است که ارتفاع و عرض زیرفضا با ارتفاع و عرض طرح والد دوبعدی آن محدود می شود.
- آنها مانند فرزندان موجودیتی که در آن فراخوانی شده اند رفتار می کنند. این به این معنی است که اگر شما یک
Subspace
که در داخل یک SpatialPanel
تودرتو ساخته شده است صدا کنید، آن زیرفضا فرزند SpatialPanel
است که فراخوانی می شود.
این رفتارهای زیرفضای تو در تو، قابلیت هایی مانند:
- جابجایی کودک با نهاد والد
- تنظیم موقعیت کودک با استفاده از Offset
SubspaceModifier
- ارائه یک شی 3 بعدی که بالای رابط کاربری 2 بعدی شما قرار دارد و با ارتفاع و عرض فضای مناسب در چیدمان دو بعدی مطابقت دارد.
یک فضای فرعی به برنامه خود اضافه کنید
مثال کد زیر نحوه افزودن زیرفضاهای سطح بالا و تودرتو به برنامه خود را نشان می دهد:
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)
}
}
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-08-28 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-08-28 بهوقت ساعت هماهنگ جهانی."],[],[],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/7a0ebbee11495f628cf9d574f6b6069c2867232a/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/7a0ebbee11495f628cf9d574f6b6069c2867232a/xr/src/main/java/com/example/xr/compose/Subspace.kt#L47-L62\n```\n\n\u003cbr /\u003e"]]