复制下面的工具类 MyImageSpan:
public class MyImageSpan extends ImageSpan {public MyImageSpan(Drawable arg1) {super(arg1);}public int getSize(Paint paint, CharSequence text, int start, int end,Paint.FontMetricsInt fm) {Drawable d = getDrawable();Rect rect = d.getBounds();if (fm != null) {Paint.FontMetricsInt fmPaint=paint.getFontMetricsInt();int fontHeight = fmPaint.bottom - fmPaint.top;int drHeight=rect.bottom-rect.top;int top= drHeight/2 - fontHeight/4;int bottom=drHeight/2 + fontHeight/4;fm.ascent=-bottom;fm.top=-bottom;fm.bottom=top;fm.descent=top;}return rect.right;}@Overridepublic void draw(Canvas canvas, CharSequence text, int start, int end,float x, int top, int y, int bottom, Paint paint) {Drawable b = getDrawable();canvas.save();int transY = 0;transY = ((bottom-top) - b.getBounds().bottom)/2+top;canvas.translate(x, transY);b.draw(canvas);canvas.restore();}}
在代码中设置即可:
Spannable spannable = et_context.getText().insert(start, faceCode);Drawable drawable = context.getResources().getDrawable(faceId);drawable.setBounds(0, 0, px, px);spannable.setSpan(new MyImageSpan(drawable), start, start + faceCode.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);