【问题标题】:How to make a date delimiter in DatePickerDialog in Kotlin?如何在 Kotlin 的 DatePickerDialog 中制作日期分隔符?
【发布时间】:2021-07-06 09:56:31
【问题描述】:

我有一个 DatePickerDialog 绑定到的 EditText。我正在努力使 DatePickerDialog 的日期约束不早于今天和年份。我找到了几个如何在 Java 中执行此操作的示例,并尝试了不同的编写方式,但没有任何效果:要么应用程序崩溃,要么无法正常工作。您能帮我设置 DatePickerDialog 的日期限制吗?

NewItemActivity.kt

class NewItemActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_new_item)

        val editDate = findViewById<EditText>(R.id.editDate)
        editDate.setOnClickListener {
            showDateDialog(editDate)
        }

    }

    private fun showDateDialog(editDate: EditText?) {
        val calendar: Calendar = Calendar.getInstance()
        val dateSetListener =
            OnDateSetListener { _, year, month, dayOfMonth ->
                calendar[Calendar.YEAR] = year
                calendar[Calendar.MONTH] = month
                calendar[Calendar.DAY_OF_MONTH] = dayOfMonth
                val simpleDateFormat = SimpleDateFormat("dd-MM-yyyy")
                editDate?.setText(simpleDateFormat.format(calendar.time))
            }

        DatePickerDialog(
            this@NewItemActivity,
            dateSetListener,
            calendar[Calendar.YEAR],
            calendar[Calendar.MONTH],
            calendar[Calendar.DAY_OF_MONTH]).show()
    }
}

【问题讨论】:

    标签: android kotlin datepicker dialog


    【解决方案1】:

    你可以试试这个过去的日期

    datePickerDialog.getDatePicker().setMaxDate(cal.getTimeInMillis())

    对于未来的日期 datePickerDialog.getDatePicker().setMinDate(cal.getTimeInMillis())

     fun openDatePickerDialog() {
            // Get Current Date
            val cal: Calendar = Calendar.getInstance()
            val datePickerDialog = DatePickerDialog(this@EditPostActivity,
                { view, year, monthOfYear, dayOfMonth ->
                    val selectedDate: String =
                        dayOfMonth.toString() + "-" + (monthOfYear + 1) + "-" + year
                    binding.etDate.setText(selectedDate)
                }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)
            )
            datePickerDialog.getDatePicker().setMaxDate(cal.getTimeInMillis())
            datePickerDialog.show()
        }
    

    你可以用这个来改变你的日期格式:

     fun convertDateToFormat(
            date: String?,
            format_date: String?,
            format_return: String?
        ): String? {
    
            var dt = Date()
            try {
                val sdf = SimpleDateFormat(format_date, Locale.ENGLISH)
                dt = sdf.parse(date)
            } catch (e: Exception) {
                e.printStackTrace()
            }
            return DateFormat.format(format_return, dt).toString()
        }
    
    
    
    
    Calendar today = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            selectedDateStr = sdf.format(today.getTime());
            String currentDate = Global.Companion.convertDateToFormat(selectedDateStr, "yyyy-MM-dd", "dd-MM-yyyy");
            editText.setText(currentDate);
       
    

    【讨论】:

    • editDate?.setText(selectedDate) 这是在editText中设置你的日期
    • 哦,我明白了。一切正常。谢谢!但是请回答这个问题,我需要删除我之前的所有代码,只留下新功能openDatePickerDialog
    • 只是我的日期应该格式化成通常的DD.mm.yyyy格式的日期字段,如果是今天就写Today。您能告诉我如何在您的函数中执行此操作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2016-10-17
    • 1970-01-01
    • 2022-07-19
    相关资源
    最近更新 更多