【发布时间】:2022-01-17 09:16:35
【问题描述】:
美好的一天。我有一个 android 应用程序,允许用户在编辑文本中输入他们的生日。
编辑文本具有以下属性:
<com.google.android.material.textfield.TextInputLayout
style="@style/CustomOutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundColor="@color/white"
android:hint="Birthday MM/DD/YYYY">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_new_member_birthday"
android:textColor="@color/black"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="16sp"
android:inputType="date"/>
</com.google.android.material.textfield.TextInputLayout>
如何检查他们的输入是否遵循 mm/DD/yyyy 格式?
编辑: 我尝试添加以下块,不幸的是,它使我的应用程序崩溃了。
private fun isDateValid(date: String): Boolean {
val format = "MM/dd/yyyy"
return try {
val formatter = DateTimeFormatter.ofPattern(format)
val convertedDate = LocalDate.parse(date, formatter)
Toast.makeText(this, "Date is $convertedDate", Toast.LENGTH_SHORT).show()
true
} catch (e: ParseException) {
Toast.makeText(this, "Error parsing date.", Toast.LENGTH_LONG).show()
false
}
}
我通过 Activity 调用这个方法:
val etBirthday = binding.etNewMemberBirthday.text.toString()
...
TextUtils.isEmpty(etBirthday) || isDateValid(etBirthday)->{
showErrorSnackBar(binding.root, "Please input a valid date.", true)
false
}
...
【问题讨论】:
-
也许改用日期选择器类型的东西?一系列的下拉?然后您可以确保传递的日期与正则表达式模式或其他内容匹配。
-
Date checking 的可能重复项;虽然,您正在构建 Android GUI,所以也许您不应该使用文本输入来选择日期:Date picker
-
我讨厌日期选择器的一件事是它太宽敞了。别担心,这只是为了测试目的。当时间到来时,这可能会派上用场。我就是想知道这个想法能不能实现。
-
在这种情况下,只需使用
DateTimeFormatter或SimpleDateFormat和合适的模式来解析日期,并捕获并报告异常。 -
总之......那是 Kotlin,我是一个 Java 人。如果你没有用
[java]标记 kotlin 问题会更合适。