根據預設,2D 行動裝置或大螢幕 Android 應用程式可在 Android XR 中運作,並在 3D 空間中顯示為 2D 面板。您可以加入沉浸式 XR 功能,強化現有的 2D Android 應用程式,從平面螢幕體驗轉換為動態 3D 環境。
將 Android 應用程式導入 XR 時,請考量下列重要原則。
- 空間功能:Android XR 提供多種空間功能,可供應用程式使用,但您不必實作每項功能。請策略性地導入與應用程式視覺階層、版面配置和使用者歷程相輔相成的廣告格式。建議加入自訂環境和多個面板,打造真正身歷其境的體驗。請參閱空間 UI 設計指南,判斷空間元素的最佳整合方式。
- 自動調整式 UI:XR 可讓您靈活設計寬敞的 UI,完美融入無限畫布和可自由調整大小的視窗。其中一項最重要的考量,是使用我們的大螢幕設計指南,針對這個廣闊的環境最佳化應用程式的版面配置。即使應用程式目前僅限行動裝置使用,您仍可利用引人入勝的環境提升使用者體驗,但針對大螢幕最佳化 UI,是針對 Android XR 最佳化應用程式的最佳方式之一。
- UI 架構:建議使用 Jetpack Compose for XR 建構 UI。如果應用程式依賴 View,請參閱「在 XR 中使用 View」,進一步瞭解如何在處理 View 時運用 Compose 互通性,或評估是否直接使用 Jetpack SceneCore 程式庫。
- 在 Play 商店發布:如要確認使用者能在 Play 商店找到您的 XR 強化應用程式,請按照下列步驟操作:
- 建議您移除任何不必要的功能需求,簡化應用程式。
- 請前往 Google Play 管理中心,確認應用程式未選擇不採用 XR 發布功能,以免應用程式從 Play 商店搜尋結果中排除。
將 2D UI 元件轉換為 3D
只要遵循這些提示,就能大幅提升應用程式的 XR 體驗。
- 優先考量大螢幕相容性:確保應用程式 UI 符合大螢幕設計原則,確保在廣闊的 XR 環境中,文字和內容仍清晰易讀。
- 策略性使用空間功能:找出應用程式使用者歷程中的關鍵時刻,在這些時刻加入空間功能,提升體驗,並充分運用平台獨特功能。
- 以使用者舒適度為考量,放置空間面板:使用空間面板設計版面配置時,請將面板放置在與使用者舒適的距離,避免造成壓迫感或感覺太近。
- 使用自動調整 UI 建立空間版面配置:運用自動調整 UI 概念 (例如窗格和漸進式顯示),有效將版面配置分解為多個空間面板,以最佳方式呈現資訊。
- 使用軌道器顯示常駐元素和模式:軌道器應保留給常駐和情境式使用者體驗元素,例如導覽和控制項。請限制軌道元素的使用,以免畫面雜亂,確保清晰度。
- 謹慎使用高度:對保持靜止且不會隨內容捲動的暫時性元件套用空間高度。避免大面積抬高,以免造成視覺不適,並維持平衡的視覺階層。
Jetpack Compose for XR 推出新元件,可管理 XR 強化功能,您不必自行處理。舉例來說,您可以使用 SpatialPopup 和 SpatialDialog 取代對應的 2D 元素。如果無法使用空間 UI,這些元件會顯示為一般 2D UI,並在可行時顯示應用程式的空間 UI。使用方式很簡單,只要修改一行程式碼,即可取代對應的 2D UI 元素。
將對話方塊轉換為 SpatialDialog
// Previous approach Dialog( onDismissRequest = onDismissRequest ) { MyDialogContent() } // New XR differentiated approach SpatialDialog( onDismissRequest = onDismissRequest ) { MyDialogContent() }
將彈出式視窗轉換為 SpatialPopup
// Previous approach Popup(onDismissRequest = onDismissRequest) { MyPopupContent() } // New XR differentiated approach SpatialPopup(onDismissRequest = onDismissRequest) { MyPopupContent() }
提升 2D UI 元素
如要進一步控制 UI 提升效果,可以使用 SpatialElevation,將應用程式中的任何可組合項提升至 Z 軸上空間面板上方,並使用 SpatialElevationLevel 設定。這有助於吸引使用者注意、建立更佳的階層,並提高可讀性,如以下範例所示。
// Elevate an otherwise 2D Composable (signified here by ComposableThatShouldElevateInXr). SpatialElevation(elevation = SpatialElevationLevel.Level4) { ComposableThatShouldElevateInXr() }
程式碼重點
- 請勿將底部功能表和側邊功能表等大型區域和平面空間化或提升。
- 請勿提高可與內容一起捲動的 UI 元素。
將 2D 元件遷移至軌道
軌道器是浮動元素,通常包含使用者可互動的控制項。軌道器可以錨定至空間面板或其他實體,例如空間版面配置。這樣一來,內容就有更多空間,使用者也能快速存取功能,而不會遮擋主要內容。

非空間化導覽邊欄

空間化 (XR 專用) 導覽邊欄
以下程式碼範例說明如何將 2D UI 元件遷移至 Orbiter。
// Previous approach NavigationRail() // New XR differentiated approach Orbiter( position = OrbiterPosition.TopStart( horizontalEdgeAlignment = OrbiterPosition.EdgeAlignment.Outside, offset = DpVolumeOffset(x = dimensionResource(R.dimen.start_orbiter_padding)) ) ) { NavigationRail() }
軌道飛行器的重點
- 軌道器元件可將現有的 UI 元素附加至空間面板
- 請參閱 Android XR 應用程式設計指南,確認要為軌道器遷移哪些元素,以及應避免的模式。
- 建議您只調整少數導覽元件,例如導覽邊欄、頂端應用程式列或底部應用程式列。
- 未啟用空間 UI 時,不會顯示 Orbiters。舉例來說,這些應用程式不會顯示在 Home Space 或手機、平板電腦和折疊式裝置等裝置上。
將 2D 元件遷移至空間面板
空間面板是 Android XR 應用程式 UI 的基礎構成元素。
面板是 UI 元素、互動式元件和沉浸式內容的容器。設計時,您可以加入軌道等元件,供使用者控制,並在空間上提升 UI 元素,吸引使用者注意特定互動。
程式碼重點
- 請參閱 Android XR 應用程式設計指南,確認要將哪些元素遷移至面板,以及應避免的模式。
- 請遵循下列最佳做法,妥善放置空間面板:
- 面板應在距離使用者眼睛 1.5 公尺的中心位置生成。
- 內容應顯示在使用者視野中央 41° 的範圍內。
- 使用者移動時,面板會固定在原位。錨定功能僅適用於透視模式。
- 請遵循系統建議,為面板設定 32 dp 圓角。
- 觸控目標應為 56 dp,且不得小於 48 dp。
- 請保持對比度,確保內容清晰易讀,尤其是使用透明背景時。
- 請遵循 Android 設計色彩原則,並使用 Material Design 色彩系統,為應用程式實作深色和淺色主題。
- 搭配現有 UI 元素使用 Spatial Panels API。
將 2D UI 遷移至單一空間面板
根據預設,應用程式會在主畫面中顯示單一面板。瞭解如何在主畫面和全螢幕之間切換。如要將該內容移至全螢幕,可以使用 SpatialPanel。
以下是做法範例。
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier.movable().resizable(), ) { AppContent() } } } else { AppContent() }
將 2D UI 遷移至多個空間面板
您可以為應用程式 UI 使用單一空間面板,也可以將 2D UI 遷移至多個空間面板。如果您選擇在應用程式 UI 中使用多個面板,可以調整面板的位置和旋轉角度 (類似於在 2D 中配置 UI)。首先,您需要明確設計出要達成的目標,然後使用 Spatial UI 版面配置 API (SpatialBox、SpatialRow、SpatialColumn、SpatialLayoutSpacer、SpatialAlignment) 和子空間修飾符,來定位及旋轉面板。實作多個面板時,請避免使用某些重要模式。
- 避免重疊面板,以免使用者無法看到重要資訊。
- 避免讓使用者看到過多面板。
- 避免將面板放在不舒服或不易察覺的位置。例如,使用者很難注意到放在身後的面板。
- 如要進一步瞭解如何開發空間 UI,請參閱完整的指南。

非空間化內容

Orbiter 內部的空間化 (XR 調整) 媒體遙控器,以及分成多個空間面板的內容
SpatialRow { SpatialPanel( SubspaceModifier .width(384.dp) .height(592.dp) ) { StartSupportingPanelContent() } SpatialPanel( SubspaceModifier .height(824.dp) .width(1400.dp) ) { App() } SpatialPanel( SubspaceModifier .width(288.dp) .height(480.dp) ) { EndSupportingPanelContent() } }
新增空間功能
構思並開始將 2D UI 元件轉換為 3D 後,您也可以開始研究其他可加入應用程式的空間功能,為 Android XR 打造更與眾不同的體驗。
檢查空間功能
決定是否顯示特定 UI 元素時,請避免檢查特定 XR 裝置或模式。如果檢查的是裝置或模式,而非功能,當特定裝置的功能隨時間變動時,可能會發生問題。請改用 LocalSpatialCapabilities.current.isSpatialUiEnabled 直接檢查必要的空間化功能,如以下範例所示。這種做法可確保應用程式正確適應各種 XR 體驗,不必在每次推出新裝置或功能變更時更新。
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { SupportingInfoPanel() } else { ButtonToPresentInfoModal() } // Similar check for audio val spatialAudioEnabled = LocalSpatialCapabilities.current.isSpatialAudioEnabled
使用環境變更使用者周遭
如要透過變更使用者周遭環境,在應用程式中營造沉浸感,可以使用環境。在程式碼中新增環境是一項簡單的變更,不會對應用程式現有的 UI 造成重大影響。如要進一步瞭解如何設定環境,請務必參閱完整的指南。
新增 3D 內容
3D 模型和空間影片等 3D 內容,有助於打造更身歷其境的體驗,並增進空間理解。應用程式只能在空間功能可用時顯示 3D 內容,因此請先檢查空間功能是否可用。
請參閱適當指南,瞭解如何新增 3D 模型、空間影片或空間音訊。