כרטיס

רכיב ה-Composable‏ Card פועל כקונטיינר של Material Design לממשק המשתמש. בדרך כלל, כל כרטיס מציג פריט תוכן אחד קוהרנטי. הנה כמה דוגמאות למקומות שבהם אפשר להשתמש בכרטיס:

  • מוצר באפליקציית שופינג.
  • כתבה חדשותית באפליקציית חדשות.
  • הודעה באפליקציית תקשורת.

ההתמקדות בהצגת פריט תוכן יחיד היא מה שמבדיל בין Card לבין מאגרי תוכן אחרים. לדוגמה, Scaffold מספק מבנה כללי למסך שלם. כרטיס הוא בדרך כלל רכיב קטן יותר בממשק משתמש בתוך פריסה גדולה יותר, בעוד שרכיב פריסה כמו Column או Row מספק API פשוט וכללי יותר.

כרטיס מוגבה עם טקסט וסמלים.
איור 1. דוגמה לכרטיס עם טקסט וסמלים.

הטמעה בסיסית

Card מתנהג בדומה למאגרים אחרים במצב כתיבה. מצהירים על התוכן שלו על ידי קריאה לרכיבים אחרים שניתנים להרכבה בתוכו. לדוגמה, שימו לב איך הפונקציה Card מכילה קריאה לפונקציה Text בדוגמה המינימלית הבאה:

@Composable
fun CardMinimalExample() {
    Card() {
        Text(text = "Hello, world!")
    }
}

הטמעות מתקדמות

אפשר לעיין בהפניה להגדרת ה-API של Card. הוא מגדיר כמה פרמטרים שמאפשרים לכם להתאים אישית את המראה וההתנהגות של הרכיב.

הנה כמה פרמטרים חשובים שכדאי לשים לב אליהם:

  • elevation: מוסיף צל לרכיב, כך שהוא נראה מורם מעל הרקע.
  • colors: משתמשת בסוג CardColors כדי להגדיר את צבע ברירת המחדל של הקונטיינר ושל כל רכיבי הצאצא.
  • enabled: אם מעבירים את הערך false לפרמטר הזה, הכרטיס מופיע כמושבת ולא מגיב לקלט של המשתמש.
  • onClick: בדרך כלל, Card לא מקבל אירועי קליק. לכן, העומס העיקרי שחשוב לציין הוא זה שמגדיר פרמטר onClick. כדאי להשתמש בעומס היתר הזה אם רוצים שההטמעה של Card תגיב ללחיצות של המשתמש.

בדוגמה הבאה אפשר לראות איך אפשר להשתמש בפרמטרים האלה, וגם בפרמטרים נפוצים אחרים כמו shape ו-modifier.

כרטיס מלא

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

המאפיין החשוב כאן הוא colors, שמשמש לשינוי צבע המילוי.

@Composable
fun FilledCardExample() {
    Card(
        colors = CardDefaults.cardColors(
            containerColor = MaterialTheme.colorScheme.surfaceVariant,
        ),
        modifier = Modifier
            .size(width = 240.dp, height = 100.dp)
    ) {
        Text(
            text = "Filled",
            modifier = Modifier
                .padding(16.dp),
            textAlign = TextAlign.Center,
        )
    }
}

ההטמעה הזו נראית כך:

כרטיס מלא בצבע הווריאציה של המשטח מתוך ערכת העיצוב של Material.
איור 2. דוגמה לכרטיס מלא.

כרטיס מוגבה

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

אפשר להשתמש במאפיין elevation כדי לשלוט במראה של הגובה ובצל שנוצר.

@Composable
fun ElevatedCardExample() {
    ElevatedCard(
        elevation = CardDefaults.cardElevation(
            defaultElevation = 6.dp
        ),
        modifier = Modifier
            .size(width = 240.dp, height = 100.dp)
    ) {
        Text(
            text = "Elevated",
            modifier = Modifier
                .padding(16.dp),
            textAlign = TextAlign.Center,
        )
    }
}

ההטמעה הזו נראית כך:

כרטיס מוגבה מעל הרקע של האפליקציה, עם צל.
איור 3. דוגמה לכרטיס מורחב.

כרטיס עם קווי מתאר

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

@Composable
fun OutlinedCardExample() {
    OutlinedCard(
        colors = CardDefaults.cardColors(
            containerColor = MaterialTheme.colorScheme.surface,
        ),
        border = BorderStroke(1.dp, Color.Black),
        modifier = Modifier
            .size(width = 240.dp, height = 100.dp)
    ) {
        Text(
            text = "Outlined",
            modifier = Modifier
                .padding(16.dp),
            textAlign = TextAlign.Center,
        )
    }
}

ההטמעה הזו נראית כך:

כרטיס עם מסגרת שחורה דקה.
איור 4. דוגמה לכרטיס עם קו מתאר.

מגבלות

לכרטיסים אין פעולות גלילה או סגירה מובנות, אבל אפשר לשלב אותם ברכיבים שאפשר להרכיב מהם ממשק משתמש שמציעים את התכונות האלה. לדוגמה, כדי להטמיע החלקה לסגירה בכרטיס, משלבים אותו עם הקומפוזיציה SwipeToDismiss. כדי לשלב עם גלילה, משתמשים במקשי שינוי של גלילה כמו verticalScroll. מידע נוסף זמין במסמכי התיעוד של Scroll.

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