class DatePickerLayoutActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener,
DatePicker.OnDateChangedListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AndroidThreeTen.init(this);
try {
this.supportActionBar!!.hide()
} catch (e: NullPointerException) {
}
setContentView(R.layout.activity_date_picker_layout)
buttonOpenDatePicker.setOnClickListener {
showDatepicker()
}
}
fun showDatepicker(){
var c = Calendar.getInstance(Locale("th","TH"))
var year = c.get(Calendar.YEAR)
var month = c.get(Calendar.MONTH)
var day = c.get(Calendar.DAY_OF_MONTH)
var datePickerDialog = YearDatePickerDialog(this,android.R.style.Theme_Holo_Light_Dialog_MinWidth,this , year, month ,day)
datePickerDialog.datePicker.maxDate = Date((Date().year + 543) +20 , 12, 31).time
datePickerDialog.datePicker.minDate = Date((Date().year + 543) - 20, 12, 31).time
datePickerDialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
datePickerDialog.datePicker.spinnersShown = true
datePickerDialog.datePicker.calendarViewShown = false
datePickerDialog.window?.setBackgroundDrawable( ColorDrawable(Color.TRANSPARENT))
datePickerDialog.show()
}
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
}
override fun onDateChanged(view: DatePicker?, year: Int, monthOfYear: Int, dayOfMonth: Int) {
}
}
class YearDatePickerDialog(
context: Context,
them:Int,
listener: DatePickerDialog.OnDateSetListener,
year: Int,
month: Int,
day: Int
) : DatePickerDialog(context, them,listener, year, month, day) {
override fun onDateChanged(view: DatePicker, year: Int, month: Int, dayOfMonth: Int) {
super.onDateChanged(view, year, month, dayOfMonth)
var daySpinner = context.getResources().getIdentifier("android:id/day", null, null);
if (month == 1 && isLeapYear(year)) { // February and leap year
val dayPicker = view.findViewById<NumberPicker>(daySpinner) // Get NumberPicker of day
dayPicker?.apply {
minValue = 1
maxValue = 29
}
} else if(month == 1 && !isLeapYear(year)) { // Non-leap year or other months
val dayPicker = view.findViewById<NumberPicker>(daySpinner) // Get NumberPicker of day
dayPicker?.apply {
minValue = 1
maxValue = 28
}
}
}
private fun isLeapYear(year: Int): Boolean {
val isChristianYear = year -543
return isChristianYear % 400 == 0 || (isChristianYear % 4 == 0 && isChristianYear % 100 != 0)
}
}
从上面的代码中,当我将微调器移至 2024 年(闰年)时,我遇到了问题。从我的日期选择器图像中,我看到有 2024 年 2 月 29 日,但是当我将日期移至 2 月 29 日(闰年)时,该月份将移至 3 月 1 日,自动选择。
我可以通过哪些方式轻松定制?谢谢。