Я использую эту библиотеку Календаря https://github.com/wdullaer/MaterialDateTimePicker, чтобы отключить определенные дни, скажем, все субботы и воскресенья, я достиг их, используя приведенный ниже код
private fun showDatePicker() {
val workOffDaysList = Prefs.with(this).getStringSet(WSKey.WORK_OFF, null)
val holidaysList = Prefs.with(this).getStringSet(WSKey.HOLIDAYS, null)
var calendar = Calendar.getInstance()
var date: Date? = null
dpd = DatePickerDialog.newInstance(
this,
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH)
)
dpd!!.accentColor = ContextCompat.getColor(this@CommonHoldDetailActivity, R.color.mdtp_accent_color)
val sdf = SimpleDateFormat(this.resources.getString(R.string.date_format), Locale.US)
for (s in holidaysList) {
try {
date = sdf.parse(s)
} catch (e: ParseException) {
e.printStackTrace()
}
calendar = dateToCalendar(date)
println(calendar.time)
val dates = ArrayList<Calendar>()
dates.add(calendar)
val disabledDays1 = dates.toTypedArray()
dpd!!.disabledDays = disabledDays1
}
var calendarDays: Calendar
val weekends = ArrayList<Calendar>()
val weeks = 366
for (s in workOffDaysList) {
when {
s.equals("0", ignoreCase = true) -> {
var i = 0
while (i < weeks * 7) {
calendarDays = Calendar.getInstance()
calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.SUNDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
weekends.add(calendarDays)
i += 7
}
val disabledDays = weekends.toTypedArray()
dpd!!.disabledDays = disabledDays
}
s.equals("1", ignoreCase = true) -> {
var i = 0
while (i < weeks * 7) {
calendarDays = Calendar.getInstance()
calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.MONDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
weekends.add(calendarDays)
i += 7
}
val disabledDays = weekends.toTypedArray()
dpd!!.disabledDays = disabledDays
}
s.equals("2", ignoreCase = true) -> {
var i = 0
while (i < weeks * 7) {
calendarDays = Calendar.getInstance()
calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.TUESDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
weekends.add(calendarDays)
i += 7
}
val disabledDays = weekends.toTypedArray()
dpd!!.disabledDays = disabledDays
}
s.equals("3", ignoreCase = true) -> {
var i = 0
while (i < weeks * 7) {
calendarDays = Calendar.getInstance()
calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.WEDNESDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
weekends.add(calendarDays)
i += 7
}
val disabledDays = weekends.toTypedArray()
dpd!!.disabledDays = disabledDays
}
s.equals("4", ignoreCase = true) -> {
var i = 0
while (i < weeks * 7) {
calendarDays = Calendar.getInstance()
calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.THURSDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
weekends.add(calendarDays)
i += 7
}
val disabledDays = weekends.toTypedArray()
dpd!!.disabledDays = disabledDays
}
s.equals("5", ignoreCase = true) -> {
var i = 0
while (i < weeks * 7) {
calendarDays = Calendar.getInstance()
calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.FRIDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
weekends.add(calendarDays)
i += 7
}
val disabledDays = weekends.toTypedArray()
dpd!!.disabledDays = disabledDays
}
s.equals("6", ignoreCase = true) -> {
var i = 0
while (i < weeks * 7) {
calendarDays = Calendar.getInstance()
calendarDays.add(Calendar.DAY_OF_YEAR, Calendar.SATURDAY - calendarDays.get(Calendar.DAY_OF_WEEK) + 7 + i)
weekends.add(calendarDays)
i += 7
}
val disabledDays = weekends.toTypedArray()
dpd!!.disabledDays = disabledDays
}
}
}
dpd!!.minDate = todaysDate
dpd!!.show(supportFragmentManager, "DatePickerDialog")
}
override fun onDateSet(view: DatePickerDialog?, year: Int, monthOfYear: Int, dayOfMonth: Int) {
val date = year.toString() + "-" + (monthOfYear + 1) + "-" + dayOfMonth
txtRecheduleDate!!.text = date
dpd!!.dismiss()
}
Но проблема в том, что сегодня воскресеньеи если я установил minDate в качестве текущей даты, то он будет доступен для выбора.Но я должен показать следующую выбираемую дату, которая не попадает под «Отключенные даты».