Android ビューベースのアプリの UI を開発する

Compose の方法を試す
Android XR では、Jetpack XR SDK を使用する Jetpack Compose が推奨される UI ツールキットです。

Android UI 開発の最新の進歩を活用し、アプリを業界のベスト プラクティスに沿って最新の状態に保つには、Android Jetpack Compose フレームワークを使用するのが最善の方法です。

ただし、移行しておらず、Android ビューベースのアプリを空間化する場合、いくつかの方法があります。

SpatialPanels 内で既存のビューを再利用する

SpatialPanel は Jetpack Compose for XR ライブラリの一部ですが、ビューも受け入れます。MainActivity で setSubspaceContent を使用する場合は、次の例に示すように、既存のビューを SpatialPanel に配置します。

setSubspaceContent {
   SpatialPanel(
       view = MyCustomView(this),
       modifier = SubspaceModifier.height(500.dp).width(500.dp).depth(25.dp)
   )
}

Android ビューと Compose の相互運用 API を使用する

View と Compose 間の相互運用に関するガイダンスをご覧ください。このドキュメントでは、これらのフレームワークを併用する方法と、使用できるコードサンプルへのリンクについて説明します。

ComposeView を使用して、既存のフラグメントに空間パネルとオービターを追加する

XML レイアウトで ComposeView を使用して、コンポーザブルを追加し、新しい XR コンテンツを作成します。[ViewBinding][ViewBinding] を使用して、onCreateView 関数で ComposeView を呼び出します。

詳しくは、ComposeView のガイダンスをご覧ください。

override fun onCreateView(
   inflater: LayoutInflater,
   container: ViewGroup?,
   savedInstanceState: Bundle?
): View {
   val view = inflater.inflate(R.layout.fragment_first, container, false)
   val composeView = view.findViewById<ComposeView>(R.id.compose_view)
   composeView.apply {
       // Dispose of the Composition when the view's LifecycleOwner
       // is destroyed
       setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
       setContent {
           // In Compose world
           Orbiter(
               position = Edge.Top,
               offset = 10.dp,
               alignment = Alignment.End
           ) {
               SpatialPanel(SubspaceModifier.height(500.dp).width(500.dp)) {
                   Text("Spatial Panel with Orbiter")
               }
           }
       }
       return view
   }
}

Jetpack SceneCore ライブラリを直接操作する

Compose for XRJetpack SceneCore 上に構築されています。ビューベースのアプリを空間化する場合、Compose for XR 内で既存の UI コードを引き続き使用することも、代わりに Jetpack SceneCore の Session を直接使用することもできます。

PanelEntity を使用して、SceneCore からパネルを直接ビルドできます。コンポーネントを使用して、パネルを移動可能またはサイズ変更可能にします。詳細については、エンティティに一般的な動作を追加するをご覧ください。

val panelContent = MyCustomView(this)
val panelEntity = xrSession.createPanelEntity(
   panelContent,
   surfaceDimensionsPx = Dimensions(500f,500f,500f),
   dimensions = Dimensions(1f,1f,1f),
   name = "panel entity"
)