es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Selector de fecha Material Desactivar opción de año

Tengo el siguiente código:

private void openDatePicker() {
    MaterialDatePicker picker =
            MaterialDatePicker.Builder.datePicker()
                    .setTitleText("Seleccionar fecha")
                    .setTheme(R.style.DatePickerTheme)
                    .setSelection(MaterialDatePicker.todayInUtcMilliseconds())
                    .build();
    picker.show(getParentFragmentManager(),"tag");
    picker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener() {
        @Override
        public void onPositiveButtonClick(Object selection) {
            try {
                mtnRecDate.setText(sdf.format(selection));
            } catch (Exception e) {
                FancyToast.makeText(getContext(),"¡Falló al establecer la fecha!",FancyToast.LENGTH_LONG,FancyToast.ERROR,false).show();
            }

        }
    });
}

Estilo:

<!-- Estilos y temas del selector. -->
<style name="DatePickerTheme" parent="@style/ThemeOverlay.MaterialComponents.MaterialCalendar">
    <item name="materialCalendarStyle">@style/Widget.MaterialComponents.MaterialCalendar</item>
    <item name="materialCalendarFullscreenTheme">@style/ThemeOverlay.MaterialComponents.MaterialCalendar.Fullscreen</item>
    <item name="materialCalendarTheme">@style/Widget.MaterialComponents.MaterialCalendar.MonthNavigationButton</item>
    <item name="materialCalendarMonthNavigationButton">@style/Widget.MaterialComponents.MaterialCalendar.MonthNavigationButton</item>
</style>

Estoy intentando ocultar la opción del año:

incorrecto

Debería verse más así:

correcto

¿Cómo puedo lograr esto? Intenté cambiar el tema del estilo (ver arriba), pero desafortunadamente no obtuve resultados.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para eliminar la opción de año en el MaterialDatePicker, utiliza el método .setCalendarConstraints() y pasa un CalendarConstraints.Builder() con los métodos .setStart() y .setEnd() para limitar el rango de fechas al año actual. Aquí tienes el código actualizado:

    private void openDatePicker() {
        MaterialDatePicker picker =
                MaterialDatePicker.Builder.datePicker()
                        .setTitleText("Seleccionar fecha")
                        .setTheme(R.style.DatePickerTheme)
                        .setSelection(MaterialDatePicker.todayInUtcMilliseconds())
                        .setCalendarConstraints(new CalendarConstraints.Builder()
                                .setStart(MaterialDatePicker.todayInUtcMilliseconds())
                                .setEnd(MaterialDatePicker.todayInUtcMilliseconds() + TimeUnit.DAYS.toMillis(364))
                                .build())
                        .build();
        picker.show(getParentFragmentManager(),"tag");
        picker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener() {
            @Override
            public void onPositiveButtonClick(Object selection) {
                try {
                    mtnRecDate.setText(sdf.format(selection));
                } catch (Exception e) {
                    FancyToast.makeText(getContext(),"¡Falló al establecer la fecha!",FancyToast.LENGTH_LONG,FancyToast.ERROR,false).show();
                }
    
            }
        });
    }
    

    Esto limitará las fechas seleccionables al año actual y eliminará el desplegable de año del MaterialDatePicker.

Comments are closed.