Скрыть содержимое строки в промежутке - PullRequest
2 голосов
/ 27 июня 2019

У меня 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
        }
    }

1 Ответ

0 голосов
/ 27 июня 2019

Не уверен, даст ли это именно то, что вы хотите, но обычно отображение языка разметки в TextView или EditText (?) Может быть выполнено следующим образом:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    textView.setText(Html.fromHtml("@<m id="36c03920-f411-4919-a175-a5b1eb616592">Full name</m>, how are you doing?", Html.FROM_HTML_MODE_COMPACT));
} else { 
    textView.setText(Html.fromHtml("@<m id="36c03920-f411-4919-a175-a5b1eb616592">Full name</m>, how are you doing?")); 
...