Uygulamanıza seçici ekleyin

"Oluştur" yöntemini deneyin
Android için önerilen kullanıcı arayüzü araç seti Jetpack Compose'dur. Compose'da bileşenleri nasıl ekleyeceğinizi öğrenin.

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.

materyal.io'dan bir 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 biçimlendirilmiş ve kullanıcının yerel ayarına göre ayarlanmış bir saat veya tarih seçebilmesini sağlar.

Material.io'daki kalıcı tarih seçici örneği
Şekil 2. Modal 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 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çin onCreateDialog() 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çin onCreateDialog() 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:

  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ürülen nesneyi oluşturmak için forDate() sınıfında AutofillValue nesnesi oluşturmak üzere forDate() sınıfının yöntemini kullanın.
  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 temsilini kullanın.
  5. 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.