כלי לבחירת שעה

כלי לבחירת שעה מאפשרים למשתמשים לבחור שעה. אתם יכולים להשתמש ברכיבי ה-Composable‏ TimePicker ו-TimeInput כדי להטמיע כלי לבחירת שעה באפליקציה.

סוגים

יש שני סוגים של כלי לבחירת תאריך ושעה:

  • חיוג: מאפשר למשתמשים להגדיר שעה על ידי הזזת ידית סביב חוגה.
  • קלט: מאפשר למשתמשים להגדיר שעה באמצעות המקלדת.

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

חוגה וכלי לבחירת שעה.
איור 1. חוגה ובוחר שעה להזנה.

פלטפורמת ה-API

כדי להטמיע את רכיב בחירת השעה, משתמשים ב-TimePicker או ב-TimeInput Composable:

  • TimePicker: הטמעה של כלי לבחירת שעה עם חוגה.
  • TimeInput: הטמעה של בוחר שעות לקלט.

מדינה

גם בשביל TimePicker וגם בשביל TimeInput, צריך לעבור TimePickerState. כך תוכלו להגדיר את הזמן שנבחר כברירת מחדל שמופיע בכלי לבחירת תאריכים. הוא גם מתעד את השעה שהמשתמש בחר באמצעות הכלי לבחירת שעה.

תיבת דו-שיח

החלוניות לבחירת שעה מופיעות בתיבות דו-שיח. בדוגמאות במדריך הזה לא נעשה שימוש בתיבות דו-שיח. דוגמאות לשימוש בתיבות דו-שיח מופיעות במדריך בנושא תיבות דו-שיח לבחירת שעה.

חלונית לבחירת שעה עם חוגה

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

@Composable
fun DialExample(
    onConfirm: () -> Unit,
    onDismiss: () -> Unit,
) {
    val currentTime = Calendar.getInstance()

    val timePickerState = rememberTimePickerState(
        initialHour = currentTime.get(Calendar.HOUR_OF_DAY),
        initialMinute = currentTime.get(Calendar.MINUTE),
        is24Hour = true,
    )

    Column {
        TimePicker(
            state = timePickerState,
        )
        Button(onClick = onDismiss) {
            Text("Dismiss picker")
        }
        Button(onClick = onConfirm) {
            Text("Confirm selection")
        }
    }
}

בדוגמה הבאה:

  • Calendar.getInstance() מאתחלת את TimePickerState עם השעה הנוכחית.
    • בדוגמה הזו נשתמש ב-java.util.Calendar. אפשר להפעיל בפרויקט את Java 8+ API desugaring כדי להשתמש ב-java.time.LocalTime בכל גרסאות Android.
  • הקומפוזבל TimePicker מציג את הכלי לבחירת שעה, ומקבל את timePickerState כפרמטר.
  • ההטמעה כוללת שני לחצנים: אחד לאישור הבחירה ואחד לסגירת הבורר.

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

כלי לבחירת שעה עם חוגה. המשתמש יכול לבחור שעה באמצעות החוגה.
איור 2. כלי לבחירת שעה עם חוגה.

הזנת זמן באמצעות הכלי לבחירת שעה

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

@Composable
fun InputExample(
    onConfirm: () -> Unit,
    onDismiss: () -> Unit,
) {
    val currentTime = Calendar.getInstance()

    val timePickerState = rememberTimePickerState(
        initialHour = currentTime.get(Calendar.HOUR_OF_DAY),
        initialMinute = currentTime.get(Calendar.MINUTE),
        is24Hour = true,
    )

    Column {
        TimeInput(
            state = timePickerState,
        )
        Button(onClick = onDismiss) {
            Text("Dismiss picker")
        }
        Button(onClick = onConfirm) {
            Text("Confirm selection")
        }
    }
}

נקודות חשובות שכדאי לשים לב אליהן בהטמעה הזו:

  • המבנה זהה בעצם לבורר השעות של החוגה, וההבדל העיקרי הוא השימוש ב-TimeInput במקום ב-TimePicker.
  • הפרמטר is24Hour של timePickerState מוגדר באופן מפורש לערך true. ערך ברירת המחדל הוא false.

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

כלי לבחירת שעה. המשתמש יכול להזין שעה באמצעות שדות טקסט.
איור 3. כלי לבחירת שעה.

שימוש במצב

כדי להשתמש בזמן שהמשתמש בחר בכלי לבחירת זמן, מעבירים את TimePickerState המתאים לפונקציה onConfirm. לאחר מכן, רכיב ה-composable של ההורה יכול לגשת לזמן שנבחר באמצעות TimePickerState.hour ו-TimePickerState.minute.

בדוגמה הבאה אפשר לראות איך עושים את זה:

@Composable
fun DialUseStateExample(
    onConfirm: (TimePickerState) -> Unit,
    onDismiss: () -> Unit,
) {
    val currentTime = Calendar.getInstance()

    val timePickerState = rememberTimePickerState(
        initialHour = currentTime.get(Calendar.HOUR_OF_DAY),
        initialMinute = currentTime.get(Calendar.MINUTE),
        is24Hour = true,
    )

    Column {
        TimePicker(
            state = timePickerState,
        )
        Button(onClick = onDismiss) {
            Text("Dismiss picker")
        }
        Button(onClick = { onConfirm(timePickerState) }) {
            Text("Confirm selection")
        }
    }
}

אחר כך אפשר לקרוא לרכיב הניתן להרכבה כך:

var selectedTime: TimePickerState? by remember { mutableStateOf(null) }

// ...

DialUseStateExample(
    onDismiss = {
        showDialExample = false
    },
    onConfirm = {
            time ->
        selectedTime = time
        showDialExample = false
    },
)

// ...

if (selectedTime != null) {
    val cal = Calendar.getInstance()
    cal.set(Calendar.HOUR_OF_DAY, selectedTime!!.hour)
    cal.set(Calendar.MINUTE, selectedTime!!.minute)
    cal.isLenient = false
    Text("Selected time = ${formatter.format(cal.time)}")
} else {
    Text("No time selected.")
}

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

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