TextView中使用一个字符串替换字符串str中start到end的子字符串(终极版)

来源:互联网 发布:java base64 中文乱码 编辑:程序博客网 时间:2024/05/16 05:12

转载请注明出处,谢谢!

我之前写过一篇textview字符串替换的文章,但是那个并不完善,例如会有接不上的现象,在某些机型上会出现重叠等等

下面是我彻底解决这些问题的方案

sb.setSpan(new ReplacementSpan() {@Overridepublic 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);}@Overridepublic 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);
里面传入的变量同学们可以根据自己的需求做相应的修改

0 0