Изменение цвета английского символа на красный с помощью edittext
Попытка изменить цвет ввода edittext, когда символ является алфавитом. поэтому я добавил textWatcher в edittext и проверил его с помощью регулярного выражения. Похоже, работает нормально, но не работает, когда строка ввода начинается с английского. Когда первая строка ввода начинается с алфавита, тогда числовой текст также меняет цвет на красный, даже если его нет в результате регулярного выражения.
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, то вывод будет выглядеть как
1 ответ
Для этого вам нужно будет использовать текст HTML.
String htmlText = et.replace(textToBeColored,"<font
color='#c5c5c5'>"+textToBeColored +"</font>");
et?.setText(Html.fromHtml(htmlText);
Я бы также потенциально изменил регулярное выражение на
(\ D) <- соответствует любому символу без цифр
([a-zA-Z]) <- сгруппирует их, что приведет к меньшему количеству запросов на замену