转载请注明出处,谢谢!
我之前写过一篇textview字符串替换的文章,但是那个并不完善,例如会有接不上的现象,在某些机型上会出现重叠等等
下面是我彻底解决这些问题的方案
sb.setSpan(new ReplacementSpan() {
@Override
public int getSize(Paint paint, CharSequence text, int start, int end,
FontMetricsInt fm) {
//最后一个参数为end-1,防止这个span最后与下一个字符之间有空格
if (fm != null) {
paint.getFontMetricsInt(fm);
}
return (int) paint.measureText(text, start, end);
}
@Override
public void draw(Canvas canvas, CharSequence text, int start, int end,
float x, int top, int y, int bottom, Paint paint) {
// String newText = "****" + text.toString().substring(start + 4, end);
paint.setUnderlineText(true);
paint.setColor(linkColor);
canvas.drawText("****", 0, end - start, x, y, paint);
}
}, start, start + 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
在画这个span之前要先设置覆盖的那几个字符typeface是monospace(等宽字符)的,不然就会出现空格、重叠等现象
代码如下:
sb.setSpan(new TypefaceSpan("monospace"), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
里面传入的变量同学们可以根据自己的需求做相应的修改