Uygulamanıza seçici ekleyin

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.

Material.io'dan zaman seçici örneği
Şekil 1. Mobil takvim seçicide saat seçimi.

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.

Material.io'dan modal tarih seçici örneği
Şekil 2. Kalıcı tarih seçici

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çin onCreateDialog() 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çin onCreateDialog() 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:

  1. EditText öğesinden devralan bir sınıf oluşturun.
  2. AUTOFILL_TYPE_DATE değerini döndüren getAutofillType() yöntemini uygulayın.
  3. Tarihi milisaniye cinsinden temsil eden bir AutofillValue nesnesi döndüren getAutofillValue() yöntemini uygulayın. Döndürme nesnesini oluşturmak için forDate() yöntemini kullanarak AutofillValue nesnesi oluşturun.
  4. autofill() yöntemini uygulayın. Bu yöntem, AUTOFILL_TYPE_DATE türündeki AutofillValue parametresini işleme mantığını sağlar. Parametreyi işlemek için mm/yyyy gibi uygun bir dize temsili oluşturun. Görünümünüzün text özelliğini ayarlamak için dize gösterimini kullanın.
  5. 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.