Android中如何让MaterialDatePicker默认显示当月当前日期?
解决MaterialDatePicker初始显示当月第一天而非当天的问题
我明白你遇到的困扰:明明设置了默认选中当天,但MaterialDatePicker打开时却总是显示当月第一天,比如今天是5月30日,日历初始却定位到5月1日。这其实是因为你没配置日历打开时的初始滚动位置,下面给你具体的解决办法:
问题根源
你当前的代码只设置了可选日期的起始边界(con.setStart(today))和默认选中日期(startDateBuilder.setSelection(today)),但没有指定日历打开时要滚动到的位置。MaterialDatePicker默认会显示当月第一天,哪怕你选中了其他日期。
解决步骤
只需要在CalendarConstraints.Builder中添加setOpenAt(today)方法,这个方法会强制日历打开时直接滚动到你指定的日期(这里就是当天),而不是默认的当月第一天。
修改后的完整代码
MaterialDatePicker.Builder startDateBuilder; MaterialDatePicker startDatePicker; startDateBuilder = MaterialDatePicker.Builder.datePicker(); startDateBuilder.setTitleText("Starting date"); long today = MaterialDatePicker.todayInUtcMilliseconds(); CalendarConstraints.Builder con = new CalendarConstraints.Builder(); CalendarConstraints.DateValidator dateValidator = DateValidatorPointForward.now(); con.setValidator(dateValidator); // 隐藏/禁用过去的日期 con.setStart(today); // 设置可选日期的起始点为今天 con.setOpenAt(today); // 关键配置:让日历打开时定位到当天的位置 startDateBuilder.setSelection(today); startDateBuilder.setCalendarConstraints(con.build()); startDateBuilder.setTheme(R.style.MaterialCalendarTheme); // 自定义主题 startDatePicker = startDateBuilder.build(); startDatePicker.show(getSupportFragmentManager(), startDatePicker.toString());
代码说明
setSelection(today):设置默认选中的日期为当天setStart(today):限制用户只能选择当天及以后的日期setOpenAt(today):控制日历初始显示的位置,确保打开时就定位到当天所在的月份区域,头部也会正常显示当前月份
这样修改后,你再次打开日期选择器时,就会直接看到当天所在的日历视图,而不是默认的当月第一天了。
内容的提问来源于stack exchange,提问作者RaJ
相关产品推荐
相关产品推荐

