У меня EditText
с содержанием: @<m id="36c03920-f411-4919-a175-a5b1eb616592">Full name</m>, how are you doing?
.Я хотел бы скрыть тег с id
от пользователя и оставить только @Full name, how are you doing?
при отображении текста.Тем не менее getText
должен возвращать полный контент.
Я нашел ReplacementSpan
полезным для этого подхода.Сначала попытался заменить только </m>
, но текст рисуется дважды в две строки.Первая строка начинается с @
, а вторая начинается с <
.Также не может вставить новый текст.getSize
вызывается несколько раз, а draw
вызывается дважды.
Верен ли мой подход?Стоит ли пытаться найти другое решение и хранить идентификаторы в отдельной коллекции и выполнять постобработку на getText()
?
Код:
inner class RemoveTagSpan : ReplacementSpan() {
private val regexEndTag = Regex("</m>")
override fun draw(canvas: Canvas, text: CharSequence?, start: Int, end: Int, x: Float, top: Int, y: Int, bottom: Int, paint: Paint) {
text?.replace(regexEndTag, "")?.let { canvas.drawText(it, start, it.length - 1, x, y.toFloat(), paint) }
}
override fun getSize(paint: Paint, text: CharSequence?, start: Int, end: Int, fm: FontMetricsInt?): Int {
return text?.replace(regexEndTag, "")?.let { paint.measureText(it).roundToInt() } ?: 0
}
}