【发布时间】:2021-08-18 09:37:00
【问题描述】:
我需要将 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 中键入第二个字符后,我的应用程序崩溃了。
请提出解决方案。
【问题讨论】:
标签: android android-edittext string-formatting