Pemilih waktu

Pemilih waktu menyediakan cara bagi pengguna untuk memilih waktu. Anda dapat menggunakan composable TimePicker dan TimeInput untuk menerapkan pemilih waktu di aplikasi Anda.

Jenis

Ada dua jenis pemilih waktu:

  • Telepon: Memungkinkan pengguna menyetel waktu dengan menggerakkan tuas di sekeliling kenop.
  • Input: Memungkinkan pengguna menyetel waktu menggunakan keyboard.

Gambar berikut memberikan contoh pemilih waktu panggilan di sebelah kiri, dan pemilih waktu input di sebelah kanan:

Tombol putar dan pemilih waktu input.
Gambar 1. Tombol putar dan pemilih waktu input.

Platform API

Untuk menerapkan pemilih waktu, gunakan composable TimePicker atau TimeInput:

  • TimePicker: Mengimplementasikan pemilih waktu panggilan.
  • TimeInput: Menerapkan pemilih waktu input.

Status

Untuk TimePicker dan TimeInput, Anda juga harus meneruskan TimePickerState. Dengan begitu, Anda dapat menetapkan waktu yang dipilih secara default yang muncul di pemilih. Fungsi ini juga merekam waktu yang dipilih pengguna menggunakan pemilih.

Dialog

Pemilih waktu muncul dalam dialog. Contoh dalam panduan ini tidak menggunakan dialog. Untuk contoh yang menggunakan dialog, lihat panduan Dialog untuk alat pilih waktu.

Pemilih waktu panggilan

Cuplikan ini menunjukkan cara menerapkan pemilih waktu panggilan dasar.

@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")
        }
    }
}

Pertimbangkan hal berikut dalam cuplikan ini:

  • Calendar.getInstance() melakukan inisialisasi TimePickerState dengan waktu saat ini.
    • Contoh ini menggunakan java.util.Calendar. Aktifkan desugaring API Java 8+ di project Anda untuk menggunakan java.time.LocalTime secara alternatif di semua versi Android.
  • Composable TimePicker menampilkan alat pilih waktu, yang menggunakan timePickerState sebagai parameter.
  • Implementasi ini mencakup dua tombol: satu untuk mengonfirmasi pilihan dan satu lagi untuk menutup alat pilih.

Implementasi ini muncul sebagai berikut:

Pemilih waktu lingkaran. Pengguna dapat memilih waktu menggunakan kenop.
Gambar 2. Pemilih waktu lingkaran.

Memasukkan pemilih waktu

Cuplikan ini menunjukkan cara mengimplementasikan pemilih waktu gaya input dasar.

@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")
        }
    }
}

Poin-poin penting yang perlu diperhatikan dalam penerapan ini:

  • Strukturnya pada dasarnya sama dengan pemilih waktu panggilan, dengan perbedaan utama adalah penggunaan TimeInput, bukan TimePicker.
  • Parameter is24Hour untuk timePickerState ditetapkan secara eksplisit ke true. Secara default, nilainya adalah false.

Implementasi ini muncul sebagai berikut:

Pemilih waktu input. Pengguna dapat memasukkan waktu menggunakan kolom teks.
Gambar 3. Pemilih waktu input.

Menggunakan status

Untuk memanfaatkan waktu yang dipilih pengguna dalam alat pilih waktu, teruskan TimePickerState yang sesuai ke fungsi onConfirm Anda. Composable induk kemudian dapat mengakses waktu yang dipilih melalui TimePickerState.hour dan TimePickerState.minute.

Cuplikan berikut menunjukkan cara melakukannya:

@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")
        }
    }
}

Kemudian, Anda dapat memanggil composable seperti ini:

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.")
}

Untuk mengetahui detail selengkapnya, lihat penerapan lengkap di aplikasi cuplikan.

Referensi lainnya