kotlin - ¿Cómo deshabilitar fechas futuras en Android MaterialDatePicker?

CorePress2024-01-24  16

Estoy intentando crear un DatePicker simple usando MaterialDatePicker donde las fechas futuras están deshabilitadas. Probé algunas respuestas de otras preguntas similares de StackOverflow pero no funcionó. Este es mi código hasta ahora:-

val datePicker = MaterialDatePicker.Builder.datePicker().apply {
        setTitleText(getString(R.string.label_select_dob))
        setCalendarConstraints(limitRange().build())
    }.build()

 private fun limitRange(): CalendarConstraints.Builder {
    val calendarStart: Calendar = Calendar.getInstance()
    val calendarEnd: Calendar = Calendar.getInstance()
    val year = 1900
    val startMonth = 1
    val startDate = 1
    calendarStart.set(year, startMonth, startDate)
    calendarEnd.set(2021, 3, 27)
    val minDate: Long = calendarStart.timeInMillis
    val maxDate: Long = calendarEnd.timeInMillis

    val constraintsBuilder = CalendarConstraints.Builder()
    val validators: ArrayList<CalendarConstraints.DateValidator> = ArrayList()
    validators.add(DateValidatorPointForward.from(minDate))
    validators.add(DateValidatorPointBackward.before(maxDate))
    constraintsBuilder.setValidator(CompositeDateValidator.allOf(validators))

    return constraintsBuilder
}

¿Esto responde a tu pregunta? Fecha mínima máxima del selector de fechas de Android antes del nivel de API 11

– Ticherhaz FreePalestine

27/03/2021 a las 16:41

@Ticherhaz: No, esas respuestas son para el diálogo de la biblioteca android.app. Estoy solicitando el cuadro de diálogo de la biblioteca com.google.android.material.datepicker

-Ankur Anand

27/03/2021 a las 17:41



------------------------------------

Para deshabilitar fechas futuras, simplemente use DateValidatorPointBackward proporcionado por la biblioteca.

Con hoy:

val constraintsBuilder =
    CalendarConstraints.Builder()
        .setValidator(
            DateValidatorPointBackward.now())

Si necesita una fecha personalizada (todas las fechas posteriores al 1 de abril):

    val calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
    calendar[Calendar.DAY_OF_MONTH] = 1
    calendar[Calendar.MONTH] = Calendar.APRIL
    val april = calendar.timeInMillis

    val constraintsBuilder =
        CalendarConstraints.Builder()
            .setValidator(
                DateValidatorPointBackward.before(april))



------------------------------------

val constraintsBuilder =
            CalendarConstraints.Builder()
                .setValidator(DateValidatorPointBackward.now())

val dataPicker = MaterialDatePicker.Builder.datePicker().apply {
            setTitleText("Select Previous Dates")
            setCalendarConstraints(constraintsBuilder.build())
        }.build()



------------------------------------

Primero cree un generador de restricciones

 val constraintsBuilder = CalendarConstraints.Builder().setValidator(DateValidatorPointBackward.now())

Segundo páselo al método setCalendarConstraints

val dialog1 = MaterialDatePicker.Builder.datePicker().setCalendarConstraints(constraintsBuilder.build())

Asignarlo a una variable y mostrar

val picker = dialog1.build()
           
picker.show(adapter.getFragmentManager(), picker.toString())

Para obtener más información sobre la biblioteca del selector de fecha de material, puede visitar el siguiente enlace:

https://material.io/components/date-pickers/android

Respondido al

4 de marzo de 2022 a las 11:27

Mohd Hasanat Hyder

Mohd Hasanen Hyder

9

2

2 insignias de plata

6

6 insignias de bronce

3

Asegúrate de formatear correctamente tu código.

-Halo

4 de marzo de 2022 a las 15:35

¿Puedes ayudarme con eso? Cómo formatear el código de una buena manera

- Mohd H.asanat hyder

6 de marzo de 2022 a las 12:22

Parece que alguien ya lo ha editado

-Halo

6 de marzo de 2022 a las 12:38

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare