פיתוח ממשק משתמש לאפליקציות ל-Android שמבוססות על תצוגות

כדאי לנסות את התכונה 'כתיבה מהירה'
Jetpack Compose באמצעות Jetpack XR SDK היא ערכת הכלים המומלצת לבניית ממשק משתמש ב-Android XR.

השימוש במסגרת Android Jetpack Compose הוא הדרך הטובה ביותר לנצל את השיפורים האחרונים בפיתוח ממשק המשתמש של Android, ולוודא שהאפליקציה שלכם תמיד תואמת לשיטות המומלצות בתחום.

עם זאת, אם עדיין לא העברתם את האפליקציה שלכם, ואתם רוצים להוסיף לה תמיכה במיקום גיאוגרפי על סמך Android Views, יש כמה דרכים לעשות זאת.

שימוש חוזר בתצוגות הקיימות ב-SpatialPanels

SpatialPanel הם חלק מספריית Jetpack Compose for XR, אבל הם יכולים לקבל גם תצוגות (Views). כשמשתמשים ב-setSubspaceContent ב-MainActivity, צריך להציב תצוגה קיימת ב-SpatialPanel, כפי שמתואר בדוגמה הבאה.

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

שימוש בממשקי API של Android Views ו-Compose לתאימות הדדית

הנחיות בנושא יכולת פעולה הדדית בין Views לבין Compose במסמך הזה מוסבר איך משתמשים בפלטפורמות האלה יחד, ויש בו קישורים לדוגמי קוד שאפשר להשתמש בהם.

שימוש ב-ComposeView כדי להוסיף לקטעים קיימים חלוניות מרחביות ורכיבי Orbiter

משתמשים ב-ComposeViewבפריסה של ה-XML כדי להוסיף רכיבים של Composables וליצור תוכן XR חדש. משתמשים ב-[ViewBinding][ViewBinding] כדי לקרוא לפונקציה ComposeView בפונקציה onCreateView.

מידע נוסף על ההנחיות בנושא 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 XR מבוסס על Jetpack SceneCore. אם אתם ממיינים לאופן מרחבי אפליקציה שמבוססת על Views, תוכלו להמשיך להשתמש בקוד הממשק המשתמש הקיים ב-Compose for XR, או לעבוד ישירות עם Session של Jetpack SceneCore.

אפשר ליצור לוחות ישירות מ-SceneCore באמצעות PanelEntity. שימוש ברכיבים כדי לאפשר העברה או שינוי של הגודל של הלוחות. מידע נוסף זמין במאמר הוספת התנהגות משותפת לישויות.

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