android - 将 EditText 值格式化为 DD/MM/YYYY (Android)
问题描述
我需要将 EditText 中输入的数据格式化为 DD/MM/YY。当用户输入 2 位日期 (DD) 时,应插入“/”,然后在用户输入 2 位月份 (MM) 后,必须插入另一个“/”。
我试图用 TextWatcher 来实现它:
editText?.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence?, i: Int, i1: Int, i2: Int) {}
override fun onTextChanged(charSequence: CharSequence?, i: Int, i1: Int, i2: Int) {
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
override fun afterTextChanged(editable: Editable?) {
var s: String = editable.toString()
if (editable.toString() != "" && editable.toString() != " ") {
//Below code for formatting date as DD/MM/YYYY
var str = s
if (s.contains("/")) {
str = s.replace("/", "") //Remove all '/'
}
if (str.length == 2 ) {
str= str.toCharArray().also { it[2] = '/' }.joinToString("")
}
else if (str.length == 4) {
str = str.toCharArray().also { it[2] = '/' }.joinToString("")
str = str.toCharArray().also { it[5] = '/' }.joinToString("")
}
editText.removeTextChangedListener(this) //To prevent infinite loop
editText.setText(str)
editText.setSelection(editText.length()) //fix reverse texting
editText.addTextChangedListener(this)
}
}
但是在我在 EditText 中键入第二个字符后,我的应用程序崩溃了。
请提出解决方案。
解决方案
在 afterTextChanged() 里面做了这个:
var s: String = editable.toString()
if (editable.toString() != "" && editable.toString() != " ") {
var str= s
if (s.contains("/")) {
str = s.replace("/", "") //Remove all '/'
}
if (str.length == 2 ) {
str += "/"
s = str
}
else if (str.length == 4) {
//CHANGED LOGIC BELOW FOR APPENDING "/"
str = (str.subSequence(0, 2)).toString() + "/" + (str.subSequence(2, 4)).toString() + "/"
s = str
}
editText.removeTextChangedListener(this) //To prevent infinite loop
editText.setText(s)
editText.setSelection(editText.length()) //Fix reverse texting
editText.addTextChangedListener(this)
}
到目前为止似乎运作良好。
推荐阅读
- java - for 循环返回空,点击时没有显示
- laravel - 你如何在 Laravel 中返回一个 blob 视频?
- javascript - 尝试添加 UTM 参数时,GetElementByTagName 在 iframe 弹出窗口中无法正常工作
- aws-codebuild - AWS CodeBuild 在预置步骤中出错
- python - 无法使用 ansible 用户模块为用户分配密码
- python - 在 Panda DataFrame 中过滤 groupby 数据的有效方法
- python-3.x - 带有 Python 问题的 WinAppDriver
- javascript - 如何在 JavaScript 中为继承者禁用 Symbol.hasInstance?
- python-3.x - mac上的VS代码找不到pandas模块
- c++ - 在 C++ 中以安全的方式将 char* 转换为 uint8_t*