据我所知,
DrawableMarginSpan用于在段落前面添加一个可绘制的对象,并设置相应的前导边距,因此这个 Span 不能实现你想要的功能。
你可以尝试使用
ReplacementSpan,它可以绘制你想要的内容。
public class SuperscriptDrawableSpan extends ReplacementSpan {
private Drawable mDrawable;
private int mWidth;
private int mHeight;
public SuperscriptDrawableSpan(Drawable drawable, int width, int height) {
this.mDrawable = drawable;
this.mWidth = width;
this.mHeight = height;
}
@Override
public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
return mWidth;
}
@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
mDrawable.setBounds((int) x, top, ((int) x) + mWidth, top + mHeight);
mDrawable.draw(canvas);
}
}
然后,您可以像使用其他xxxSpan一样使用它:
mSpannableBuilder = new SpannableStringBuilder()
mSpannableBuilder.append("SuperScriptDrawable^")
SuperscriptDrawableSpan spanSuperscriptDeawable = new SuperscriptDrawableSpan(getActivity().getResources().getDrawable(R.mipmap.ic_launcher), 24, 24)
mSpannableBuilder.setSpan(span, mSpannableBuilder.length() - 1,
mSpannableBuilder.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
仅用于演示,使用时需要优化。