项目中需要在TextView中高亮显示‘@人员的名称’,实现方法采用自定义ReplacementSpan,遇到高亮的文字与文本对齐问题。
解决方案:
ReplacementSpan的draw方法实现
@Override
public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) {
if(!TextUtils.isEmpty(mUserName)){
canvas.save();
int color = paint.getColor();
if(mColor != 0) {
paint.setColor(mColor);
}
//@文字对齐
int transY = bottom - y;
transY -= paint.getFontMetricsInt().descent;
canvas.translate(0,transY);
canvas.drawText(mUserName,0,mUserName.length(),x,y,paint);
paint.setColor(color);
canvas.restore();
}
}
其中mUserName就是要显示的‘@人员的名称’