Pemilih waktu

Pemilih waktu memberikan 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 dan pemilih waktu input.

Platform API

Untuk menerapkan pemilih waktu, gunakan composable TimePicker atau TimeInput:

Status

Untuk TimePicker dan TimeInput, Anda juga harus meneruskan TimePickerState. Tindakan ini memungkinkan Anda menyetel waktu default terpilih yang muncul pada pemilih. Aplikasi ini juga mencatat 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() menginisialisasi TimePickerState dengan baik.
    • Contoh ini menggunakan java.util.Calendar. Mengaktifkan Java 8+ desugaring API di project Anda untuk digunakan java.time.LocalTime di semua versi Android.
  • Composable TimePicker menampilkan pemilih waktu, yang menampilkan timePickerState sebagai parameter.
  • Implementasi ini mencakup dua tombol: satu untuk mengonfirmasi pilihan dan tombol lainnya untuk menutup pemilih.

Implementasi ini muncul sebagai berikut:

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

Pemilih waktu input

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 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 secara eksplisit ditetapkan ke true. Secara default, nilainya adalah false.

Implementasi ini muncul sebagai berikut:

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

Menggunakan status

Untuk menggunakan waktu yang dipilih pengguna di pemilih waktu, teruskan TimePickerState yang sesuai ke fungsi onConfirm Anda. Orang tua maka composable 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")
        }
    }
}

Anda kemudian 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 detail selengkapnya, lihat penerapan lengkap di cuplikan aplikasi.

Referensi lainnya