Kotlin Android:如何在佛教时代制作日期选择器旋转器

问题描述 投票:0回答:0

enter image description here

 
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 日,自动选择。

我可以通过哪些方式轻松定制?谢谢。

android kotlin datepicker calendar material-components-android
© www.soinside.com 2019 - 2024. All rights reserved.