Android, kullanıcının hazır iletişim kutuları olarak saat veya tarih seçmesi için kontroller sağlar. Bu seçiciler zamanın her bölümünü (saat, dakika, ÖÖ/ÖS) veya tarih (ay, gün, yıl) seçmek için kullanabileceğiniz kontroller sağlar.
Bu seçicileri kullanmak, kullanıcılarınızın geçerli, doğru 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 farklı düzen yapılandırmalarında (örneğin, mobil cihazlardaki temel iletişim kutusunda veya büyük ekranlardaki düzenin bir parçası olarak) görüntülemenizi sağlar.
Zaman seçici oluştur
DialogFragment
kullanarak TimePickerDialog
görüntülemek için DialogFragment
öğesini genişleten bir parça sınıfı tanımlayın ve parçanın onCreateDialog()
yönteminden TimePickerDialog
döndüren bir parça sınıfı tanımlayın.
DialogFragment'i saat seçici için genişletme
Bir TimePickerDialog
için DialogFragment
tanımlamak isterseniz aşağıdakileri yapın:
TimePickerDialog
örneği döndürmek içinonCreateDialog()
yöntemini tanımlayın.- Kullanıcı zamanı 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.
Artık bu parçanın bir örneğini etkinliğinize ekleyen bir etkinliğe ihtiyacınız var.
Saat seçiciyi göster
Önceki örnekte bulunana benzer 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 bir 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 DialogFragment
sınıfının yeni bir örneğinde show()
işlevini ç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. Fark, fragman için oluşturduğunuz iletişim kutusundadır.
DialogFragment
kullanarak bir DatePickerDialog
görüntülemek için DialogFragment
'u genişleten bir fragment sınıfı tanımlayın ve fragment'in onCreateDialog()
yönteminden bir DatePickerDialog
döndürün.
DialogFragment'i tarih seçici için genişletme
Bir DatePickerDialog
için DialogFragment
tanımlamak isterseniz aşağıdakileri yapın:
DatePickerDialog
örneği döndürmek içinonCreateDialog()
yöntemini tanımlayın.- Kullanıcı tarihi ayarladığında geri arama almak için
DatePickerDialog.OnDateSetListener
arabirimini 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 edinmek için DatePickerDialog
sınıfına bakın.
Bunun için etkinliğinize bu parçanın bir örneğini ekleyen bir etkinliğe ihtiyacınız vardır.
Tarih seçiciyi göster
Önceki örnekte gösterildiği gibi bir DialogFragment
tanımladıktan sonra, DialogFragment
örneği oluşturarak ve show()
'u ç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 bir 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 DialogFragment
sınıfının yeni bir örneğinde show()
işlevini çağırır. show()
yöntemi için bir FragmentManager
örneği ve parça için benzersiz bir etiket adı gerekir.
Otomatik doldurma ile seçicileri kullanma
Android, 2017'de kullanıcıların farklı uygulamalardaki formları doldurmak için kullanılabilecek verileri kaydetmesine olanak tanıyan Otomatik Doldurma çerçevesini kullanıma sundu. Seçiciler, kullanıcıların tarih veya saat verilerini depolayan bir alanın değerini değiştirmesine olanak tanıyan bir kullanıcı arayüzü sağlayarak 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 değiştirmelerine imkan tanır.
Seçiciler iletişim kutusu olduğundan diğer alanlarla birlikte bir etkinlikte gösterilmez. Seçici görünmediğinde seçici verilerini görüntülemek için EditText
gibi başka bir görünüm kullanabilirsiniz. Bu görünüm, seçici görünmediğinde değeri görüntüleyebilir.
Bir EditText
nesnesi, yerel olarak AUTOFILL_TYPE_TEXT
türünde otomatik doldurma verileri bekliyor.
Buna karşılık otomatik doldurma hizmetleri, verilerin uygun bir temsilini oluşturmak için verileri AUTOFILL_TYPE_DATE
biçiminde kaydeder. Türlerdeki tutarsızlığı çözmek için, EditText
öğesinden devralan ve AUTOFILL_TYPE_DATE
türü değerleri doğru şekilde işlemek için gerekli yöntemleri uygulayan özel bir görünüm oluşturmanızı öneririz.
AUTOFILL_TYPE_DATE
türündeki değerleri işleyebilecek 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ürülen nesneyi oluşturmak içinforDate()
sınıfındaAutofillValue
nesnesi oluşturmak üzereforDate()
sınıfının yöntemini kullanın. 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 temsilini kullanın.- Kullanıcı,
EditText
özel alt sınıfındaki tarihi düzenlemek istediğinde bir seçici gösteren işlevi uygulayın. Görünüm,text
mülkünü kullanıcının seçicide seçtiği değerin dize temsiliyle günceller.
EditText
sınıfının, AUTOFILL_TYPE_DATE
değerlerini işleyen bir alt sınıfı örneği için Java veya Kotlin'deki Otomatik Doldurma Çerçevesi örneğine bakın.
Ö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.