如何让Android CalendarView不设置默认选中日期?
解决Android CalendarView默认选中当前日期+仅显示当前月份的方案
我之前也碰到过这个一模一样的问题,查了好多资料才凑出完整的解决方案,给你一步步说:
1. 取消默认选中的日期
CalendarView本身没有提供直接取消选中的API,但我们可以通过设置一个无效的日期来绕过默认选中逻辑。具体来说,就是给它设置一个早于你设置的最小日期(或者干脆是1970年之前的时间戳),这样控件就找不到可选中的有效日期,自然就不会显示选中状态了:
CalendarView calendarView = findViewById(R.id.your_calendar_view_id); // 用post延迟执行,确保控件已经完成初始化 calendarView.post(() -> { // 设置一个无效的时间戳(比如1970年之前),第三个参数true表示触发日期变更监听(可选) calendarView.setDate(-1, false, true); });
2. 限制仅显示当前月份
要让CalendarView只展示当前月份,我们需要计算出当月的第一天和最后一天的时间戳,然后设置为控件的minDate和maxDate:
Calendar calendar = Calendar.getInstance(); // 设置最小日期为当月第一天 calendar.set(Calendar.DAY_OF_MONTH, 1); long monthStart = calendar.getTimeInMillis(); // 设置最大日期为当月最后一天 calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); long monthEnd = calendar.getTimeInMillis(); // 给CalendarView设置日期范围 calendarView.setMinDate(monthStart); calendarView.setMaxDate(monthEnd);
把这两段代码结合起来,就能实现你要的效果:只显示当前月份,且没有默认选中的日期。亲测在Android 8到14的版本上都能正常工作~
内容的提问来源于stack exchange,提问作者krishnanspace
相关产品推荐
相关产品推荐

