我的 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
称为两次。
我的方法正确吗?我应该尝试在单独的集合中找到不同的解决方案并存储ID,并在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
}
}
不确定这是否会给您确切想要的东西,但是通常可以以这种方式完成文本视图或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?"));