Uygulamanıza seçici ekleyin

Android, kullanıcının uygun bir saat veya tarih seçmesini sağlayan kontroller sağlar kullanıma hazır iletişim kutuları var. Bu seçiciler, her bir görevi seçmek için kullanabileceğiniz kontroller sağlar belirli bir kısmı zamanın bir kısmını (saat, dakika, ÖÖ/ÖS) veya tarih (ay, gün, yıl) olarak da gösterebilir.

ziyaret edin.
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ış olmalıdır.

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

Önerilerimiz: DialogFragment. her saat veya tarih seçiciyi düzenleyeceksiniz. DialogFragment, iletişim kutusu yaşam döngüsünü destekler ve seçicileri farklı bir düzende görüntülemenizi sağlar iletişim kutuları gibi yapılandırma yöntemlerini büyük ekranlardaki düzeni.

Zaman seçici oluştur

Bir TimePickerDialog. DialogFragment kullanarak, DialogFragment ve şuradan bir TimePickerDialog döndür: parçanın onCreateDialog() yöntemidir.

DialogFragment'ı zaman seçici için genişletme

TimePickerDialog için bir DialogFragment tanımlamak üzere, şunları yapın:

  • Bir örneği döndürmek için onCreateDialog() yöntemini tanımlayın TimePickerDialog.
  • Şunu uygulayın: TimePickerDialog.OnTimeSetListener. kullanıcı zamanı ayarladığında geri çağırmayı alacak şekilde arayüze sahiptir.

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.
    }
}

Şu konu hakkında bilgi için TimePickerDialog sınıfına bakın: kurucu bağımsız değişkenleridir.

Şimdi tek yapmanız gereken, bu parçanın bir örneğini etkinliği'ne dokunun.

Saat seçiciyi göster

Öncekine benzer bir DialogFragment tanımladıktan sonra zaman seçiciyi görüntüleyebilir ve DialogFragment ve show() yöntemidir.

Örneğin, dokunulduğunda iletişim kutusu:

<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öntemshow() DialogFragment önceki örnekte tanımlanmıştır. İlgili içeriği oluşturmak için kullanılan show() yöntemi için bir örnek gerekir: FragmentManager ve parça için benzersiz bir etiket adı ekleyin.

Tarih seçici oluşturun

Oluşturuluyor DatePickerDialog. TimePickerDialog oluşturmaya benzer. Aralarındaki fark iletişim kutusudur. oluşturduğunuz bir öğedir.

DialogFragment kullanarak bir 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() konumundan DatePickerDialog yöntemidir.

DialogFragment'ı tarih seçici için genişletme

DatePickerDialog için bir DialogFragment tanımlamak üzere, şunları yapın:

  • Bir örneği döndürmek için onCreateDialog() yöntemini tanımlayın DatePickerDialog.
  • Şunu uygulayın: DatePickerDialog.OnDateSetListener. kullanıcı tarihi ayarladığında geri çağırmayı alır.

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.
    }
}

Bkz. DatePickerDialog. sınıfını kullanır.

Yalnızca bu parçanın bir örneğini etkinliği'ne dokunun.

Tarih seçiciyi göster

Önceki örnekte olduğu gibi bir DialogFragment tanımladıktan sonra, DialogFragment ve show() aranıyor.

Örneğin, dokunulduğunda iletişim kutusu:

<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öntemshow() DialogFragment önceki örnekte tanımlanmıştır. İlgili içeriği oluşturmak için kullanılan show() yöntemi için FragmentManager örneği gerekir ve parça için benzersiz bir etiket adı ekleyin.

Otomatik doldurma özelliğiyle seçicileri kullanma

Android, 2017'de Otomatik doldurma çerçevesi Kullanıcılar, farklı uygulamalarda form doldurmak için kullanılabilecek veriler kaydediyor. Seçiciler kullanıcıların değişiklik yapmalarına izin veren bir kullanıcı arayüzü sağlayarak otomatik doldurma senaryolarında değeri için bir değer girin. Örneğin, bir kredi kartında bir tarih seçici, kullanıcıların kullandıkları kredi kartı bilgilerini kullanabilirsiniz.

Seçiciler iletişim kutuları olduğundan, etkinliklerde diğer alanları kullanabilirsiniz. Seçici görünmediğinde seçici verilerini görüntülemek için şunları yapabilirsiniz: Örneğin bir EditText, Bu sütun, seçici görünür olmadığında değeri gösterebilir.

EditText nesnesi, yerel olarak bu türdeki otomatik doldurma verilerini bekliyor AUTOFILL_TYPE_TEXT. Bunun aksine otomatik doldurma hizmetleri, verileri AUTOFILL_TYPE_DATE. uygun bir temsilini oluşturmayı gerektirir. arasındaki tutarsızlığı alan adını içeren özel bir görünüm oluşturmanızı öneririz. EditText ve doğru kullanımı için gereken yöntemleri uygular. değerleri için de geçerlidir.AUTOFILL_TYPE_DATE

Şu adımları uygulayarak EditText alt sınıfı oluşturun: şu AUTOFILL_TYPE_DATE türündeki değerleri işleyebilir:

  1. EditText öğesinden devralan bir sınıf oluşturun.
  2. Şunu uygulayın: getAutofillType(). yöntemidir. Bu yöntem AUTOFILL_TYPE_DATE değerini döndürür.
  3. Şunu uygulayın: getAutofillValue(). yöntemidir. Bu yöntem, AutofillValue milisaniye cinsinden tarihi temsil eden nesne. İadeyi oluşturmak için öğesini kullanmak için forDate(). yöntemini kullanarak AutofillValue nesnesini oluşturabilirsiniz.
  4. Şunu uygulayın: autofill(). yöntemidir. Bu yöntem, AutofillValue parametresi, AUTOFILL_TYPE_DATE. Parametreyi işlemek için dize temsilidir (örneğin, mm/yyyy). Dizeyi kullanın görünümünün text özelliğini ayarlamak için kullanın.
  5. Kullanıcı düzenleme yapmak istediğinde seçici görüntüleyen bir işlev uygulayın. EditText özel alt sınıfındaki tarih. Görünüm güncellenir değerin dize gösterimiyle text özelliği kullanıcının seçme aracında seçtiği bir öğedir.

Örneğin, şunları işleyen bir EditText alt sınıfı örneği: AUTOFILL_TYPE_DATE değerleri için Otomatik Doldurma Çerçevesi örneğini inceleyin: Java veya Kotlin.

Özel görünümleriniz için otomatik doldurma desteğini kanıtlama hakkında daha fazla bilgi edinmek üzere şu makaleyi inceleyin: Otomatik doldurma çerçevesi.