是否有一种方法可以使用EditText在用户输入时强调文本中的错误?或者另一个允许这种格式的控件?
当用户输入文本时,我正在尝试处理文本。例如,如果用户输入
当前时间为晚上80:30。我想在80:30下面加下划线,这样就可以很明显地看出他们犯了一个错误。
我甚至愿意在下面显示一个小的插入符号或其他东西,这样他们就可以发现错误的位置。
这是我决定的。
checkText()
从doAfterTextChanged
调用,当焦点丢失时,清除现有的格式。
然后ViewModel解析文本;它接收addValidityStyleToRange
作为参数,并使用它来应用格式化。
private fun checkText() {
clearValidityStyles()
viewModel.parseText(binding.edittext.text.toString(), ::addValidityStyleToRange)
}
/**
* Clears the styles used for valid and invalid regions of edittext.
*/
private fun clearValidityStyles() {
val text = binding.edittext.text
text.getSpans(0, text.length, UnderlineSpan::class.java).forEach { text.removeSpan(it) }
text.getSpans(0, text.length, StyleSpan::class.java).forEach { text.removeSpan(it) }
}
/**
* Applies the valid or invalid style to a range of edittext.
* Passed as a callback to the ViewModel that validates the input.
*/
private fun addValidityStyleToRange(range : IntRange, isValid : Boolean) {
val text = binding.edittext.text
val style = if (isValid) StyleSpan(Typeface.BOLD_ITALIC) else UnderlineSpan()
text.setSpan(style, range.first, range.last, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
}