Alat Pilih

Android menyediakan kontrol bagi pengguna untuk memilih waktu atau tanggal sebagai dialog yang siap digunakan. Setiap alat pilih menyediakan kontrol untuk memilih setiap bagian waktu (jam, menit, AM/PM) atau tanggal (hari, bulan, tahun). Menggunakan alat pilih ini membantu memastikan bahwa pengguna dapat memilih waktu atau tanggal.yang valid, diformat dengan benar, dan disesuaikan dengan bahasa lokal pengguna.

Sebaiknya Anda menggunakan DialogFragment untuk meng-hosting setiap alat pilih waktu atau tanggal. DialogFragment mengelola siklus proses dialog untuk Anda dan memungkinkan Anda menampilkan alat pilih dalam konfigurasi tata letak yang berbeda, seperti pada dialog dasar di handset atau sebagai bagian tersemat dari tata letak di layar besar.

Meskipun DialogFragment pertama kali ditambahkan ke platform di Android 3.0 (API level 11), jika aplikasi Anda mendukung versi Android yang lebih lama dari 3.0—bahkan hingga versi Android 1.6—Anda dapat menggunakan class DialogFragment yang tersedia di support library untuk kompatibilitas mundur.

Catatan: Contoh kode di bawah ini menunjukkan cara membuat dialog untuk alat pilih waktu dan tanggal dengan menggunakan API support library untuk DialogFragment. Jika minSdkVersion aplikasi Anda adalah versi 11 atau yang lebih tinggi, Anda dapat menggunakan versi platform DialogFragment sebagai gantinya.

Class utama adalah sebagai berikut:

Lihat juga ringkasan Fragmen.

Membuat Alat Pilih Waktu

Untuk menampilkan TimePickerDialog menggunakan DialogFragment, Anda perlu menentukan class fragmen yang memperluas DialogFragment dan menampilkan TimePickerDialog dari metode onCreateDialog() fragmen.

Catatan: Jika aplikasi Anda mendukung versi Android yang lebih lama dari 3.0, pastikan Anda telah menyiapkan project Android dengan support library seperti yang dijelaskan dalam Menyiapkan Project untuk Menggunakan Library.

Memperluas DialogFragment untuk alat pilih waktu

Untuk menentukan DialogFragment untuk TimePickerDialog, Anda harus:

Berikut contohnya:

Kotlin

class TimePickerFragment : DialogFragment(), TimePickerDialog.OnTimeSetListener {

    override fun onCreateDialog(savedInstanceState: Bundle): Dialog {
        // Use the current time as the default values for the picker
        val c = Calendar.getInstance()
        val hour = c.get(Calendar.HOUR_OF_DAY)
        val minute = c.get(Calendar.MINUTE)

        // Create a new instance of TimePickerDialog and return it
        return TimePickerDialog(activity, this, hour, minute, DateFormat.is24HourFormat(activity))
    }

    override fun onTimeSet(view: TimePicker, hourOfDay: Int, minute: Int) {
        // Do something with the time chosen by the user
    }
}

Java

public static class TimePickerFragment extends DialogFragment
                            implements TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current time as the default values for the picker
        final Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        // Create a new instance of TimePickerDialog and return it
        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // Do something with the time chosen by the user
    }
}

Lihat class TimePickerDialog untuk informasi tentang argumen konstruktor.

Sekarang yang diperlukan adalah peristiwa yang menambahkan instance fragmen ini ke aktivitas Anda.

Menampilkan alat pilih waktu

Setelah Anda menentukan DialogFragment seperti yang ditampilkan di atas, Anda dapat menampilkan alat pilih waktu dengan membuat instance DialogFragment dan memanggil show().

Misalnya, berikut adalah tombol yang memanggil metode untuk menampilkan dialog saat diklik:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/pick_time"
    android:onClick="showTimePickerDialog" />

Saat pengguna mengklik tombol ini, sistem memanggil metode berikut:

Kotlin

fun showTimePickerDialog(v: View) {
    TimePickerFragment().show(supportFragmentManager, "timePicker")
}

Java

public void showTimePickerDialog(View v) {
    DialogFragment newFragment = new TimePickerFragment();
    newFragment.show(getSupportFragmentManager(), "timePicker");
}

Metode ini memanggil show() pada instance DialogFragment baru yang telah ditentukan di atas. Metode show() memerlukan instance FragmentManager dan nama tag yang unik untuk fragmen tersebut.

Perhatian: Jika aplikasi Anda mendukung versi Android yang lebih rendah dari 3.0, pastikan Anda memanggil getSupportFragmentManager() untuk mendapatkan instance FragmentManager. Pastikan juga bahwa aktivitas yang menampilkan alat pilih waktu memperluas FragmentActivity bukan class Activity standar.

Membuat Alat Pilih Tanggal

Membuat DatePickerDialog sama seperti membuat TimePickerDialog. Perbedaannya hanya pada dialog yang Anda buat untuk fragmen.

Untuk menampilkan DatePickerDialog menggunakan DialogFragment, Anda perlu menentukan class fragmen yang memperluas DialogFragment dan menampilkan DatePickerDialog dari metode onCreateDialog() fragmen.

Memperluas DialogFragment untuk alat pilih tanggal

Untuk menentukan DialogFragment untuk DatePickerDialog, Anda harus:

Berikut contohnya:

Kotlin

class DatePickerFragment : DialogFragment(), DatePickerDialog.OnDateSetListener {

    override fun onCreateDialog(savedInstanceState: Bundle): Dialog {
        // Use the current date as the default date in the picker
        val c = Calendar.getInstance()
        val year = c.get(Calendar.YEAR)
        val month = c.get(Calendar.MONTH)
        val day = c.get(Calendar.DAY_OF_MONTH)

        // Create a new instance of DatePickerDialog and return it
        return DatePickerDialog(activity, this, year, month, day)
    }

    override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
        // Do something with the date chosen by the user
    }
}

Java

public static class DatePickerFragment extends DialogFragment
                            implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
    }
}

Lihat class DatePickerDialog untuk informasi tentang argumen konstruktor.

Sekarang yang diperlukan adalah peristiwa yang menambahkan instance fragmen ini ke aktivitas Anda.

Menampilkan alat pilih tanggal

Setelah dapat menentukan DialogFragment seperti yang ditampilkan di atas, Anda dapat menampilkan alat pilih tanggal dengan membuat instance dari DialogFragment dan memanggil show().

Misalnya, berikut adalah tombol yang memanggil metode untuk menampilkan dialog saat diklik:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/pick_date"
    android:onClick="showDatePickerDialog" />

Saat pengguna mengklik tombol ini, sistem memanggil metode berikut:

Kotlin

fun showDatePickerDialog(v: View) {
    val newFragment = DatePickerFragment()
    newFragment.show(supportFragmentManager, "datePicker")
}

Java

public void showDatePickerDialog(View v) {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");
}

Metode ini memanggil show() pada instance DialogFragment baru yang telah ditentukan di atas. Metode show() memerlukan instance FragmentManager dan nama tag yang unik untuk fragmen tersebut.

Menggunakan alat pilih dengan isi otomatis

Android 8.0 memperkenalkan Framework IsiOtomatis, yang memungkinkan pengguna untuk menyimpan data yang nantinya dapat digunakan untuk mengisi formulir di aplikasi yang berbeda. Alat pilih dapat berguna dalam skenario isi otomatis dengan menyediakan UI yang memungkinkan pengguna mengubah nilai kolom yang menyimpan data tanggal dan waktu. Misalnya, pada formulir kartu kredit, alat pilih tanggal akan memungkinkan pengguna memasukkan atau mengubah tanggal habis masa berlaku kartu kreditnya.

Karena berbentuk dialog, alat pilih tidak ditampilkan dalam aktivitas beserta kolom lainnya. Untuk menampilkan data alat pilih saat alat pilih tidak terlihat, Anda dapat menggunakan tampilan lain, seperti EditText, yang dapat menampilkan nilai saat alat pilih tidak terlihat.

Objek EditText secara native menginginkan data isi otomatis jenis AUTOFILL_TYPE_TEXT. Sebaliknya, layanan isi otomatis akan menyimpan data sebagai AUTOFILL_TYPE_DATE agar dapat membuat representasi data yang sesuai. Untuk menyelesaikan masalah inkonsistensi pada beberapa jenis isi otomatis, sebaiknya Anda membuat tampilan kustom yang mewarisi EditText dan menerapkan metode yang diperlukan untuk menangani nilai berjenis AUTOFILL_TYPE_DATE dengan tepat.

Anda harus melakukan langkah-langkah berikut untuk membuat subclass EditText yang dapat menangani nilai berjenis AUTOFILL_TYPE_DATE:

  1. Buat class yang mewarisi EditText.
  2. Terapkan metode getAutofillType() yang akan menampilkan AUTOFILL_TYPE_DATE.
  3. Terapkan metode getAutofillValue() yang akan menampilkan objek AutofillValue yang merepresentasikan tanggal dalam milidetik. Untuk membuat objek yang ditampilkan, gunakan metode forDate() untuk menghasilkan objek AutofillValue.
  4. Implementasikan metode autofill() . Metode ini menyediakan logika untuk menangani parameter AutofillValue, yang berjenis AUTOFILL_TYPE_DATE. Untuk menangani parameter tersebut, buat representasi string yang tepat, seperti mm/yyyy. Gunakan representasi string untuk menetapkan properti text tampilan Anda.
  5. Terapkan fungsionalitas yang menampilkan alat pilih saat pengguna ingin mengedit tanggal di subclass kustom EditText. Tampilan akan memperbarui properti text dengan representasi string dari nilai yang dipilih pengguna pada alat pilih tanggal.

Untuk contoh subclass EditText yang menangani nilai AUTOFILL_TYPE_DATE, lihat contoh Framework IsiOtomatis Java | Kotlin.

Untuk mempelajari lebih lanjut cara membuktikan dukungan isi otomatis untuk tampilan kustom Anda, lihat Dukungan untuk tampilan kustom.