Android日历选择器:如何禁用过去一周的周日?
解决日历选择器中禁用过去一周周日的问题
你的代码错误地禁用未来周日的原因是:每次计算时都是往未来偏移日期(i是正的增量),而不是往过去追溯。要实现禁用过去一周的周日,需要调整日期偏移的方向,从当前日期往前推算历史周日。
修正后的代码
val weekends: ArrayList<Calendar> = ArrayList() val weeksToCheck = 5 // 要禁用的过去周数 var i = 0 while (i < weeksToCheck * 7) { val sunday = Calendar.getInstance() // 先计算最近的上一个周日,再往前推i天(每次减7天,对应过去的每一周) sunday.add(Calendar.DAY_OF_YEAR, -(sunday.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY + 7) % 7 - i) weekends.add(sunday) i += 7 } val disabledDays = weekends.toTypedArray<Calendar>() datePickerDialog.disabledDays = disabledDays
代码逻辑说明
- 核心调整:把日期偏移改为负数,实现往过去方向计算
-(sunday.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY + 7) % 7:先算出当前日期到上一个周日的天数差,取负数得到往回跳的天数- 再减去
i(每次递增7),依次获取过去第1周、第2周……第N周的周日 - 这样收集到的就是过去指定周数内的所有周日,不会包含未来的日期
内容的提问来源于stack exchange,提问作者Kaviyarasan M
相关产品推荐
相关产品推荐

