Genel

Android – DatePicker ve Date Picker Range

Merhabalar,

Bugünki yazımızda android ‘te datepicker kullanımını göreceğiz.

Öncelikle projenizde tarih ya da tarih aralığı seçtirmek istiyorsanız aşağıdaki projeyi eklemeniz lazım.

Grade -> module:app içerisine

implementation 'com.google.android.material:material:1.1.0'

Material Design kütüphanesinde android ‘in tarih componenti aşağıdaki gibi.

Şimdi bunu ekrana nasıl çıkarıcağız.

Projemizde öncelikle bir işleme tıklanması lazım. Button olur, text view olur. Text view ekledik ve ekrana hatırlatıcı ekle, bir tarih seç filan yazdık.

sonra textView ‘in onClick özelliğinden yararlanarak MaterialDatePicker.Builder.datePicker ‘dan bir nesne oluşturup ekranda gösteriyoruz.

datePicker’ların 3 tane listeneri buluyor. Verileri log’lamak için addOnPositiveButtonClickListener’ı kullandık.

Kaydetmediğinde uyarı göstermek için:

    picker.addOnNegativeButtonClickListener {
         toast("dialog negative button clicked")
    }

Cancel ettiğinde :

    picker.addOnCancelListener {
         toast("dialog canceled")
    }
tv_datepicker.setOnClickListener {
    val builder= MaterialDatePicker.Builder.datePicker()
    val picker = builder.build()
    picker.show(activity!!.supportFragmentManager, picker.toString())

    picker.addOnPositiveButtonClickListener {

        Log.d("DatePicker Activity", "Date String = ${picker.headerText}::  Date epoch values::${it}")
    }
}
Çıktı : Activity: Date String = May 17, 2020::  Date epoch values::1589673600000

Tarih aralığı seçmek için olay basit. Tek yapmanız gereken nesnenizi datePicker’ı dateRangePicker ‘dan oluşturmak.

Ekran görüntüsü :

  tv_datepicker.setOnClickListener {
            val builder= MaterialDatePicker.Builder.dateRangePicker()
            val picker = builder.build()
            picker.show(activity!!.supportFragmentManager, picker.toString())

            picker.addOnPositiveButtonClickListener {

                Log.d("DatePicker Activity", "Date String = ${picker.headerText}::  Date epoch values::${it.first}:: to :: ${it.second}")
            }
        }

Çıktı : Activity: Date String = May 17 – May 20:: Date epoch values::1589673600000:: to :: 1589932800000

Tarih componentinde belirli günler göstermek isterseniz Validator yazmanız gerekiyor. Bunun için aşağıdaki kodları inceleyebilirsiniz.

    val constraintsBuilder = CalendarConstraints.Builder()  
    constraintsBuilder.setValidator(WeekDayValidator())  //  1
    builder.setCalendarConstraints(constraintsBuilder.build())   
    val picker: MaterialDatePicker<*> = builder.build()
    picker.show(supportFragmentManager, picker.toString())
    class WeekDayValidator : CalendarConstraints.DateValidator {
        private val utc =
            Calendar.getInstance(TimeZone.getTimeZone("UTC"))
        val CREATOR: Parcelable.Creator<WeekDayValidator?> =
            object : Parcelable.Creator<WeekDayValidator?> {
                override fun createFromParcel(source: Parcel): WeekDayValidator {
                    return WeekDayValidator()
                }
                override fun newArray(size: Int): Array<WeekDayValidator?> {
                    return arrayOfNulls(size)
                }
            }
        override fun writeToParcel(dest: Parcel?, flags: Int) {
        }
        override fun isValid(date: Long): Boolean {
            utc.timeInMillis = date
            val dayOfWeek = utc[Calendar.DAY_OF_WEEK]
            return dayOfWeek != Calendar.SATURDAY && dayOfWeek != Calendar.SUNDAY
        }
        override fun describeContents(): Int {
            return 0
        }
        
        override fun hashCode(): Int {
            val hashedFields = arrayOf<Any>()
            return hashedFields.contentHashCode()
        }
    }

Kaynakça :

//github.com/material-components/material-components-android/blob/master/catalog/java/io/material/catalog/datepicker/DatePickerMainDemoFragment.java

One thought on “Android – DatePicker ve Date Picker Range

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir