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:
- Menentukan metode
onCreateDialog()
untuk menampilkan instanceTimePickerDialog
- Menerapkan antarmuka
TimePickerDialog.OnTimeSetListener
untuk menerima callback saat pengguna menyetel waktu.
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:
- Menentukan metode
onCreateDialog()
untuk menampilkan instanceDatePickerDialog
- Menerapkan antarmuka
DatePickerDialog.OnDateSetListener
untuk menerima callback saat pengguna menyetel tanggal.
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
:
- Buat class yang mewarisi
EditText
. - Terapkan metode
getAutofillType()
yang akan menampilkanAUTOFILL_TYPE_DATE
. - Terapkan metode
getAutofillValue()
yang akan menampilkan objekAutofillValue
yang merepresentasikan tanggal dalam milidetik. Untuk membuat objek yang ditampilkan, gunakan metodeforDate()
untuk menghasilkan objekAutofillValue
. - Implementasikan metode
autofill()
. Metode ini menyediakan logika untuk menangani parameterAutofillValue
, yang berjenisAUTOFILL_TYPE_DATE
. Untuk menangani parameter tersebut, buat representasi string yang tepat, sepertimm/yyyy
. Gunakan representasi string untuk menetapkan propertitext
tampilan Anda. - Terapkan fungsionalitas yang menampilkan alat pilih saat pengguna ingin mengedit
tanggal di subclass kustom
EditText
. Tampilan akan memperbarui propertitext
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.