0

当字符为字母时,尝试更改 edittext 的输入颜色。所以我在edittext中添加了textWatcher并用正则表达式检查它。它看起来工作正常,但当输入字符串以英语开头时不起作用。当输入的第一个字符串以字母开头时,数字文本也会将颜色更改为红色,即使它不在正则表达式结果中。

 val regEng = "[a-zA-Z]".toRegex()

  private fun setResources() {
        et_form.addTextChangedListener(editWatcher)
    }

    var editWatcher = object : TextWatcher {
        override fun afterTextChanged(p0: Editable?) {
            p0.let { et ->
            regEng.findAll(et.toString()).map { it.range }.forEach { range ->
                    Log.d("dddd", et.toString()[range.first].toString())
                    et?.setSpan(ForegroundColorSpan(Color.RED), range.first, range.first + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
               }
            }
        }

        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        }

        override fun onTextChanged(p0: CharSequence?, start: Int, before: Int, count: Int) {
        }

    }

这是我尝试过的。如果我输入 12ABC 那么输出看起来像 在此处输入图像描述

我输入 ABC12 然后输出看起来像 在此处输入图像描述

4

1 回答 1

0

您需要使用 HTML 文本来完成此操作。

String htmlText = et.replace(textToBeColored,"<font 
                color='#c5c5c5'>"+textToBeColored +"</font>");
                et?.setText(Html.fromHtml(htmlText);

我也可能将正则表达式更改为

(\D) <- 匹配任何无数字字符

([a-zA-Z]) <-- 会将它们分组,从而减少调用替换

于 2020-07-08T08:10:10.260 回答