Uygulamanıza seçici ekleyin

Compose yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose'da nasıl bileşen ekleyeceğinizi öğrenin.

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.

material.io'daki 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 ayarları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, 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ımlayarak TimePickerDialog örneğini döndürün.
  • Kullanıcı saati ayarladığında geri çağırma almak için TimePickerDialog.OnTimeSetListener arayü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ımlayarak DatePickerDialog örneğini döndürün.
  • Kullanıcı tarihi ayarladığında geri arama almak için DatePickerDialog.OnDateSetListener arayü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

  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önüş nesnesini oluşturmak için forDate() yöntemini kullanarak bir AutofillValue nesnesi oluşturun.
  4. autofill() yöntemini uygulayın. Bu yöntem, AutofillValue türünde olan AUTOFILL_TYPE_DATE parametresini işleme mantığını sağlar. Parametreyi işlemek için mm/yyyy gibi uygun bir dize gösterimi 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 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österimiyle text ö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.