Android, kullanıcının hazır iletişim kutuları olarak bir saat veya tarih seçmesi için kontroller sağlar. Bu seçiciler, zamanın (saat, dakika, öğleden önce/sonra) veya tarihin (ay, gün, yıl) her bölümünü seçmek için 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 ayarları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, sizin için iletişim kutusu yaşam döngüsünü yönetir ve seçicileri farklı düzen yapılandırmalarında (ör. cep telefonlarındaki temel bir iletişim kutusunda veya büyük ekranlardaki düzenin yerleştirilmiş bir parçası olarak) görüntülemenize olanak tanır.
Zaman seçici oluşturma
TimePickerDialog öğesini DialogFragment kullanarak göstermek için DialogFragment öğesini genişleten bir parça sınıfı tanımlayın ve parçanın onCreateDialog() yönteminden bir TimePickerDialog döndürün.
Saat seçici için DialogFragment'i genişletme
TimePickerDialog için DialogFragment tanımlamak üzere aşağıdakileri yapın:
onCreateDialog()yöntemini tanımlayarakTimePickerDialogörneğini döndürün.- Kullanıcı saati ayarladığında geri çağırma almak için
TimePickerDialog.OnTimeSetListenerarayüzünü uygulayın.
Örneğin:
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 bir örneğini etkinliğinize ekleyen bir etkinliğe ihtiyacınız var.
Saat seçiciyi göster
Önceki örnekteki 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öntemi ç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 öğesinin yeni bir örneğinde show() işlevini çağırır. show() yöntemi için FragmentManager örneği ve parça için benzersiz bir etiket adı gerekir.
Tarih seçici oluşturma
DatePickerDialog oluşturmak, TimePickerDialog oluşturmaya benzer. Fark, parça için oluşturduğunuz iletişim kutusudur.
DialogFragment kullanarak DatePickerDialog 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 bir DatePickerDialog döndürün.
Tarih seçici için DialogFragment'i genişletme
DatePickerDialog için DialogFragment tanımlamak üzere aşağıdakileri yapın:
onCreateDialog()yöntemini tanımlayarakDatePickerDialogörneğini döndürün.- Kullanıcı tarihi ayarladığında geri arama almak için
DatePickerDialog.OnDateSetListenerarayüzünü uygulayın.
Örneğin:
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.
Bu parçanın bir örneğini etkinliğinize ekleyen bir etkinlik yeterlidir.
Tarih seçiciyi gösterme
Önceki örnekteki gibi bir DialogFragment tanımladıktan sonra,
DialogFragment örneği oluşturup show() çağırarak tarih seçiciyi görüntüleyebilirsiniz.
Örneğin, dokunulduğunda iletişim kutusunu göstermek için bir yöntemi ç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 öğesinin yeni bir örneğinde show() işlevini çağırır. show() yöntemi için FragmentManager örneği ve parçanın benzersiz bir etiket adı gerekir.
Otomatik doldurma ile seçicileri kullanma
Android, 2017'de Otomatik Doldurma çerçevesini kullanıma sundu. Bu çerçeve, kullanıcıların farklı uygulamalardaki formları doldurmak için kullanılabilecek verileri kaydetmesine olanak tanır. Seçiciler, tarih veya saat verilerini depolayan bir alanın değerini değiştirmelerine olanak tanıyan bir kullanıcı arayüzü sağlayarak otomatik doldurma senaryolarında faydalı olabilir. Örneğin, kredi kartı formunda tarih seçici, kullanıcıların kredi kartlarının son kullanma tarihini girmesine veya değiştirmesine olanak tanır.
Seçiciler iletişim kutusu olduğundan diğer alanlarla birlikte bir etkinlikte gösterilmez. Seçici görünür olmadığında seçici verilerini göstermek için
EditText gibi başka bir görünüm kullanabilirsiniz.
Bu görünüm, seçici görünür olmadığında değeri gösterebilir.
Bir EditText nesnesi, yerel olarak AUTOFILL_TYPE_TEXT türünde otomatik doldurma verileri 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ığı gidermek için EditText öğesinden devralınan ve AUTOFILL_TYPE_DATE türündeki değerlerin doğru şekilde işlenmesi için gereken yöntemleri uygulayan bir özel görünüm oluşturmanızı öneririz.
EditText türündeki değerleri işleyebilen bir EditText alt sınıfı oluşturmak için aşağıdaki adımları uygulayın:AUTOFILL_TYPE_DATE
EditTextöğesinden devralan bir sınıf oluşturun.AUTOFILL_TYPE_DATEdeğerini döndürengetAutofillType()yöntemini uygulayın.- Tarihi milisaniye cinsinden temsil eden bir
AutofillValuenesnesi döndürengetAutofillValue()yöntemini uygulayın. Dönüş nesnesini oluşturmak içinforDate()yöntemini kullanarak birAutofillValuenesnesi oluşturun. autofill()yöntemini uygulayın. Bu yöntem,AutofillValuetüründe olanAUTOFILL_TYPE_DATEparametresini işleme mantığını sağlar. Parametreyi işlemek içinmm/yyyygibi uygun bir dize gösterimi 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 seçici gösteren bir işlev uygulayın. Görünüm, kullanıcının seçicide seçtiği değerin dize gösterimiyletextözelliğini günceller.
EditText alt sınıfının AUTOFILL_TYPE_DATE değerlerini işlediği bir örnek için Java veya Kotlin'deki Otomatik Doldurma Çerçevesi örneğine bakın.
Özel görünümlerinizde otomatik doldurma desteğini kanıtlama hakkında daha fazla bilgi edinmek için Otomatik doldurma çerçevesi başlıklı makaleyi inceleyin.