是否有一种方法可以使用EditText在用户输入时强调文本中的错误?



是否有一种方法可以使用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)
    }

相关内容

最新更新