Android menyediakan kontrol bagi pengguna untuk memilih waktu atau tanggal dialog siap pakai. Alat pilih ini menyediakan kontrol untuk memilih masing-masing bagian waktu (jam, menit, AM/PM) atau tanggal (bulan, hari, 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 gunakan
DialogFragment
untuk menghosting setiap pemilih waktu atau tanggal. DialogFragment
mengelola
siklus proses dialog untuk Anda dan memungkinkan Anda menampilkan pemilih dalam tata letak yang berbeda
konfigurasi dasar, seperti pada dialog dasar pada handset atau sebagai bagian yang
tata letak pada
perangkat layar besar.
Membuat pemilih waktu
Untuk menampilkan
TimePickerDialog
dengan menggunakan DialogFragment
, tentukan class fragmen yang memperluas
DialogFragment
dan tampilkan TimePickerDialog
dari fungsi
fragmen
onCreateDialog()
.
Memperluas DialogFragment untuk pemilih waktu
Untuk menentukan DialogFragment
untuk TimePickerDialog
,
lakukan hal berikut:
- Tentukan metode
onCreateDialog()
untuk menampilkan instanceTimePickerDialog
. - Implementasikan
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 the user picks. } }
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 the user picks. } }
Lihat class TimePickerDialog
untuk mengetahui informasi tentang
argumen konstruktor.
Sekarang Anda hanya perlu peristiwa yang menambahkan instance fragmen ini ke aktivitas Anda.
Menampilkan alat pilih waktu
Setelah Anda menentukan DialogFragment
seperti yang ada di atas
Anda dapat menampilkan pemilih waktu dengan membuat instance
DialogFragment
dan memanggil
show()
.
Misalnya, berikut adalah tombol yang, saat diketuk, memanggil metode untuk menampilkan dialog:
<Button android:id="@+id/pickTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pick time" />
Jika pengguna mengetuk tombol ini, sistem akan memanggil metode berikut:
Kotlin
findViewById<Button>(R.id.pickTime).setOnClickListener { TimePickerFragment().show(supportFragmentManager, "timePicker") }
Java
findViewById<Button>(R.id.pickTime).setOnClickListener { TimePickerFragment().show(supportFragmentManager, "timePicker"); }
Metode ini memanggil show()
pada instance baru
DialogFragment
ditentukan dalam contoh sebelumnya. Tujuan
Metode show()
memerlukan instance
FragmentManager
dan nama tag yang unik untuk fragmen tersebut.
Membuat pemilih tanggal
Membuat
DatePickerDialog
seperti membuat TimePickerDialog
. Perbedaannya adalah dialog
yang Anda buat untuk fragmen.
Untuk menampilkan DatePickerDialog
menggunakan DialogFragment
,
tentukan class fragmen yang memperluas DialogFragment
dan menampilkan
DatePickerDialog
dari onCreateDialog()
fragmen
.
Memperluas DialogFragment untuk pemilih tanggal
Untuk menentukan DialogFragment
untuk DatePickerDialog
,
lakukan hal berikut:
- Tentukan metode
onCreateDialog()
untuk menampilkan instanceDatePickerDialog
. - Implementasikan
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(requireContext(), this, year, month, day) } override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) { // Do something with the date the user picks. } }
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(requireContext(), this, year, month, day); } public void onDateSet(DatePicker view, int year, int month, int day) { // Do something with the date the user picks. } }
Lihat
DatePickerDialog
untuk informasi tentang argumen konstruktor.
Anda hanya perlu peristiwa yang menambahkan instance fragmen ini ke aktivitas Anda.
Menampilkan pemilih tanggal
Setelah Anda menentukan DialogFragment
seperti contoh sebelumnya,
Anda dapat menampilkan pemilih tanggal dengan membuat instance
DialogFragment
dan memanggil show()
.
Misalnya, berikut adalah tombol yang, saat diketuk, memanggil metode untuk menampilkan dialog:
<Button android:id="@+id/pickDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pick date"/>
Jika pengguna mengetuk tombol ini, sistem akan memanggil metode berikut:
Kotlin
findViewById<Button>(R.id.pickDate).setOnClickListener { val newFragment = DatePickerFragment() newFragment.show(supportFragmentManager, "datePicker") }
Java
findViewById<Button>(R.id.pickDate).setOnClickListener { val newFragment = DatePickerFragment(); newFragment.show(supportFragmentManager, "datePicker"); }
Metode ini memanggil show()
pada instance baru
DialogFragment
ditentukan dalam contoh sebelumnya. Tujuan
Metode show()
memerlukan instance FragmentManager
dan nama tag yang unik untuk fragmen tersebut.
Menggunakan alat pilih dengan isi otomatis
Pada tahun 2017, Android memperkenalkan Framework isi otomatis, yang memungkinkan pengguna menyimpan data yang dapat digunakan untuk mengisi formulir di berbagai aplikasi. Alat pilih dapat berguna dalam skenario isi otomatis dengan menyediakan UI yang memungkinkan pengguna mengubah nilai dari {i>field<i} yang menyimpan data tanggal atau waktu. Misalnya, di kartu kredit formulir, pemilih tanggal memungkinkan pengguna memasukkan atau mengubah tanggal habis masa berlaku kartu kredit.
Karena berbentuk dialog, alat pilih tidak ditampilkan dalam aktivitas beserta
kolom lainnya. Untuk menampilkan data pemilih saat alat pilih tidak terlihat, Anda dapat
menggunakan tampilan lain, seperti
EditText
,
yang dapat menampilkan nilai saat pemilih tidak terlihat.
Objek EditText
secara native mengharapkan data isi otomatis jenis
AUTOFILL_TYPE_TEXT
.
Sebaliknya, layanan {i>autofill <i}menyimpan data sebagai
AUTOFILL_TYPE_DATE
untuk membuat representasi yang tepat. Untuk mengatasi inkonsistensi dalam
yang sama, sebaiknya Anda membuat tampilan kustom yang mewarisi
EditText
dan mengimplementasikan metode yang diperlukan untuk menangani dengan benar
nilai dari jenis AUTOFILL_TYPE_DATE
.
Lakukan langkah-langkah berikut untuk membuat subclass EditText
yang
dapat menangani nilai jenis AUTOFILL_TYPE_DATE
:
- Buat class yang mewarisi
EditText
. - Implementasikan
getAutofillType()
, yang menampilkanAUTOFILL_TYPE_DATE
. - Implementasikan
getAutofillValue()
, yang mengembalikan nilaiAutofillValue
yang mewakili tanggal dalam milidetik. Untuk membuat return , gunakanforDate()
untuk menghasilkan objekAutofillValue
. - Implementasikan
autofill()
. Metode ini menyediakan logika untuk menangani ParameterAutofillValue
, yang berjenisAUTOFILL_TYPE_DATE
. Untuk menangani parameter tersebut, buat atribut yang mewakili string tersebut, sepertimm/yyyy
. Menggunakan string untuk menetapkan propertitext
tampilan Anda. - Terapkan fungsionalitas yang menampilkan alat pilih saat pengguna ingin mengedit
tanggal di subclass kustom
EditText
. Tampilan akan diperbarui propertitext
dengan representasi string dari nilai yang dipilih pengguna pada pemilih.
Untuk contoh subclass EditText
yang menangani
Nilai AUTOFILL_TYPE_DATE
, lihat contoh Framework Isi Otomatis di
Java
atau
Kotlin
Untuk mempelajari lebih lanjut cara membuktikan dukungan isi otomatis untuk tampilan kustom Anda, lihat Framework isi otomatis.