Android, kullanıcının kullanıma hazır iletişim kutuları olarak saat veya tarih seçmesine olanak tanıyan kontroller sağlar. Bu seçiciler, her bir zaman bölümünü (saat, dakika, ÖÖ/ÖS) veya tarihi (ay, gün, yıl) seçmek için kontroller sunar.
Bu seçicileri kullanmak, kullanıcılarınızın geçerli, doğru şekilde biçimlendirilmiş ve kullanıcının yerel ayarına göre ayarlanmış bir saat veya tarih seçebilmesini sağlar.
Her saat veya tarih seçiciyi barındırmak için DialogFragment
kullanmanızı öneririz. DialogFragment
iletişim kutusu yaşam döngüsünü sizin için yönetir ve seçicileri mobil cihazlardaki temel bir iletişim kutusu veya büyük ekranlardaki düzenin yerleşik bir parçası gibi farklı düzen yapılandırmalarında görüntülemenizi sağlar.
Saat seçici oluşturma
DialogFragment
kullanarak bir TimePickerDialog
görüntülemek için DialogFragment
alanını genişleten ve parçanın onCreateDialog()
yönteminden TimePickerDialog
döndüren bir parça sınıfı tanımlayın.
Zaman seçici için DialogFragment'ı genişlet
Bir TimePickerDialog
için DialogFragment
tanımlamak üzere aşağıdakileri yapın:
TimePickerDialog
örneğini döndürmek içinonCreateDialog()
yöntemini tanımlayın.- Kullanıcı saati ayarladığında geri çağırma almak için
TimePickerDialog.OnTimeSetListener
arayüzünü uygulayın.
Aşağıda bununla ilgili bir örnek verilmiştir:
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. } }
Oluşturucu bağımsız değişkenleri hakkında bilgi için TimePickerDialog
sınıfına bakın.
Şimdi, bu parçanın örneğini etkinliğinize ekleyen bir etkinliğe ihtiyacınız vardır.
Saat seçiciyi göster
Önceki örnekte verilen gibi bir DialogFragment
tanımladıktan sonra DialogFragment
öğesinin bir örneğini oluşturup show()
yöntemini çağırarak zaman seçiciyi görüntüleyebilirsiniz.
Örneğin, dokunulduğunda iletişim kutusunu göstermek için bir yöntem çağıran düğme aşağıda verilmiştir:
<Button android:id="@+id/pickTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pick time" />
Kullanıcı bu düğmeye dokunduğunda sistem aşağıdaki yöntemi çağırır:
Kotlin
findViewById<Button>(R.id.pickTime).setOnClickListener { TimePickerFragment().show(supportFragmentManager, "timePicker") }
Java
findViewById<Button>(R.id.pickTime).setOnClickListener { TimePickerFragment().show(supportFragmentManager, "timePicker"); }
Bu yöntem, önceki örnekte tanımlanan yeni DialogFragment
örneğinde show()
çağırır. show()
yöntemi, FragmentManager
örneği ve parça için benzersiz bir etiket adı gerektirir.
Tarih seçici oluşturma
DatePickerDialog
oluşturmak, TimePickerDialog
oluşturmaya benzer. Aradaki fark, parça için
oluşturduğunuz iletişim kutusudur.
DialogFragment
kullanarak bir DatePickerDialog
görüntülemek için DialogFragment
öğesini genişleten ve parçanın onCreateDialog()
yönteminden DatePickerDialog
döndüren bir parça sınıfı tanımlayın.
Tarih seçici için DialogFragment'ı genişlet
Bir DatePickerDialog
için DialogFragment
tanımlamak üzere aşağıdakileri yapın:
DatePickerDialog
örneğini döndürmek içinonCreateDialog()
yöntemini tanımlayın.- Kullanıcı tarihi ayarladığında geri çağırma almak için
DatePickerDialog.OnDateSetListener
arayüzünü uygulayın.
Aşağıda bununla ilgili bir örnek verilmiştir:
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. } }
Oluşturucu bağımsız değişkenleri hakkında bilgi için DatePickerDialog
sınıfına bakın.
Yalnızca bu parçanın örneğini etkinliğinize ekleyen bir etkinliğe ihtiyacınız vardır.
Tarih seçiciyi göster
Önceki örnekte olduğu gibi bir DialogFragment
tanımladıktan sonra, DialogFragment
örneği oluşturup show()
yöntemini çağırarak tarih seçiciyi görüntüleyebilirsiniz.
Örneğin, dokunulduğunda iletişim kutusunu göstermek için bir yöntem çağıran düğme aşağıda verilmiştir:
<Button android:id="@+id/pickDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pick date"/>
Kullanıcı bu düğmeye dokunduğunda sistem aşağıdaki yöntemi çağırır:
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"); }
Bu yöntem, önceki örnekte tanımlanan yeni DialogFragment
örneğinde show()
çağırır. show()
yöntemi, bir FragmentManager
örneği ve parça için benzersiz bir etiket adı gerektirir.
Otomatik doldurma özelliğiyle seçicileri kullanma
Android, 2017'de kullanıcıların farklı uygulamalardaki formları doldurmak için kullanılabilecek verileri kaydetmesini sağlayan Otomatik Doldurma çerçevesini kullanıma sundu. Seçiciler, kullanıcıların tarih veya saat verilerinin depolandığı bir alanın değerini değiştirmesine olanak tanıyan bir kullanıcı arayüzü sunarak otomatik doldurma senaryolarında yararlı olabilir. Örneğin, kredi kartı formunda tarih seçici, kullanıcıların kredi kartlarının son kullanma tarihini girmelerine veya son kullanma tarihini değiştirmelerine olanak tanır.
Seçiciler iletişim kutusu olduklarından, diğer alanlarla birlikte bir etkinlikte görüntülenmezler. Seçici görünür olmadığında seçici verilerini görüntülemek için, seçici görünür olmadığında değeri gösterebilen EditText
gibi başka bir görünüm kullanabilirsiniz.
EditText
nesnesi yerel olarak AUTOFILL_TYPE_TEXT
türünde otomatik doldurma verilerini bekler.
Buna karşılık otomatik doldurma hizmetleri, verileri uygun bir şekilde temsil etmek için AUTOFILL_TYPE_DATE
olarak kaydeder. Türlerdeki tutarsızlıkları gidermek için EditText
değerini devralan ve AUTOFILL_TYPE_DATE
türündeki değerleri doğru şekilde işlemek için gereken yöntemleri uygulayan özel bir görünüm oluşturmanızı öneririz.
AUTOFILL_TYPE_DATE
türünün değerlerini işleyebilen bir EditText
alt sınıfı oluşturmak için aşağıdaki adımları uygulayın:
EditText
öğesinden devralan bir sınıf oluşturun.AUTOFILL_TYPE_DATE
değerini döndürengetAutofillType()
yöntemini uygulayın.- Tarihi milisaniye cinsinden temsil eden bir
AutofillValue
nesnesi döndürengetAutofillValue()
yöntemini uygulayın. Döndürme nesnesini oluşturmak içinforDate()
yöntemini kullanarakAutofillValue
nesnesi oluşturun. autofill()
yöntemini uygulayın. Bu yöntem,AUTOFILL_TYPE_DATE
türündekiAutofillValue
parametresini işleme mantığını sağlar. Parametreyi işlemek içinmm/yyyy
gibi uygun bir dize temsili oluşturun. Görünümünüzüntext
özelliğini ayarlamak için dize gösterimini kullanın.- Kullanıcı
EditText
özel alt sınıfındaki tarihi düzenlemek istediğinde bir seçici görüntüleyen işlevi uygulayın. Görünüm,text
özelliğini kullanıcının seçicide seçtiği değerin dize gösterimiyle günceller.
AUTOFILL_TYPE_DATE
değerlerini işleyen bir EditText
alt sınıfı örneği için Java veya Kotlin'deki Otomatik Doldurma Çerçevesi örneğini inceleyin.
Özel görünümleriniz için otomatik doldurma desteğini kanıtlama hakkında daha fazla bilgi edinmek istiyorsanız Otomatik doldurma çerçevesi başlıklı makaleyi inceleyin.