כרטיסיות

הכרטיסיות מאפשרות לארגן קבוצות של תוכן קשור. יש שני סוגים של כרטיסיות:

  • כרטיסיות ראשיות: ממוקמות בחלק העליון של חלונית התוכן מתחת לסרגל האפליקציה העליון. הם מציגים את יעדי התוכן העיקריים, וצריך להשתמש בהם כשנדרש רק סט אחד של כרטיסיות.
  • כרטיסיות משניות: משמשות בתוך אזור תוכן כדי להפריד עוד יותר בין תכנים קשורים וליצור היררכיה. הם נדרשים כשמסך מסוים כולל יותר מרמה אחת של כרטיסיות.
 מוצגות 3 כרטיסיות ראשיות עם סמלים משויכים (טיסות, נסיעות וחיפוש). מוצגות 2 כרטיסיות משניות (סקירה כללית, מפרטים) ללא סמלים משויכים.
איור 1. כרטיסיות ראשיות (1) וכרטיסיות משניות (2).

בדף הזה מוסבר איך להציג כרטיסיות ראשיות באפליקציה עם מסכים קשורים וניווט בסיסי.

משטח API

כדי להטמיע כרטיסיות, משתמשים ברכיבי ה-Composable‏ Tab, ‏ PrimaryTabRow ו-SecondaryTabRow. רכיב ה-Tab מייצג כרטיסייה נפרדת בשורה, ובדרך כלל משתמשים בו בתוך PrimaryTabRow (לכרטיסיות של אינדיקטורים ראשיים) או SecondaryTabRow (לכרטיסיות של אינדיקטורים משניים).

Tab כולל את הפרמטרים העיקריים הבאים:

  • selected: קובע אם הכרטיסייה הנוכחית מודגשת חזותית.
  • onClick(): פונקציית lambda נדרשת שמגדירה את הפעולה שתתבצע כשהמשתמש ילחץ על הכרטיסייה. כאן בדרך כלל מטפלים באירועי ניווט, מעדכנים את מצב הכרטיסייה שנבחרה או טוענים את התוכן המתאים.
  • text: הצגת טקסט בכרטיסייה. אופציונלי.
  • icon: הצגת סמל בכרטיסייה. אופציונלי.
  • enabled: קובעת אם הכרטיסייה מופעלת ואם אפשר ליצור איתה אינטראקציה. אם הערך הוא False, הכרטיסייה מופיעה במצב מושבת ולא מגיבה ללחיצות.

דוגמה: ניווט מבוסס-כרטיסיות

קטע הקוד הבא מטמיע סרגל ניווט עליון עם כרטיסיות לניווט בין מסכים שונים באפליקציה:

@Composable
fun NavigationTabExample(modifier: Modifier = Modifier) {
    val navController = rememberNavController()
    val startDestination = Destination.SONGS
    var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }

    Scaffold(modifier = modifier) { contentPadding ->
        PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) {
            Destination.entries.forEachIndexed { index, destination ->
                Tab(
                    selected = selectedDestination == index,
                    onClick = {
                        navController.navigate(route = destination.route)
                        selectedDestination = index
                    },
                    text = {
                        Text(
                            text = destination.label,
                            maxLines = 2,
                            overflow = TextOverflow.Ellipsis
                        )
                    }
                )
            }
        }
        AppNavHost(navController, startDestination)
    }
}

נקודות עיקריות

  • PrimaryTabRow מוצגת שורה אופקית של כרטיסיות, כשכל כרטיסייה מתאימה לDestination.
  • val navController = rememberNavController() יוצרת וזוכרת מופע של NavHostController, שמנהל את הניווט בתוך NavHost.
  • var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } מנהל את המצב של הכרטיסייה שנבחרה.
    • startDestination.ordinal מחזירה את האינדקס המספרי (המיקום) של רשומה בסוג הנתונים המונה Destination.SONGS.
  • כשלוחצים על כרטיסייה, הפונקציה onClick lambda קוראת navController.navigate(route = destination.route) כדי לנווט למסך המתאים.
  • פונקציית ה-lambda‏ onClick של Tab מעדכנת את המצב selectedDestination כדי להדגיש חזותית את הכרטיסייה שנלחצה.
  • הפונקציה קוראת ל-AppNavHost composable, מעבירה את navController ואת startDestination, כדי להציג את התוכן בפועל של המסך שנבחר.

התוצאה

בתמונה הבאה מוצגת התוצאה של קטע הקוד הקודם:

 3 כרטיסיות מסודרות אופקית בחלק העליון של מסך האפליקציה. הכרטיסיות הן 'שירים', 'אלבום' ו'פלייליסט'. הכרטיסייה 'שירים' נבחרה והיא מסומנת בקו תחתון.
איור 2. 3 כרטיסיות – שירים, אלבום ופלייליסט – מסודרות אופקית.

מקורות מידע נוספים