כרטיסיות

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

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

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

פלטפורמת ה-API

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

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

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

דוגמה: ניווט באמצעות מקש Tab

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

@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 מחזירה את האינדקס המספרי (המיקום) של רשומה בסוג הנתונים enum‏ Destination.SONGS.
  • כשלוחצים על כרטיסייה, הפונקציה onClick lambda קוראת navController.navigate(route = destination.route) כדי לנווט למסך המתאים.
  • פונקציית ה-onClick lambda של Tab מעדכנת את המצב selectedDestination כדי להדגיש חזותית את הכרטיסייה שנלחצה.
  • הפונקציה קוראת ל-AppNavHost composable, מעבירה את navController ואת startDestination, כדי להציג את התוכן בפועל של המסך שנבחר.

התוצאה

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

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

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