Android DrawableMarginSpan使用示例?

Android DrawableMarginSpan使用示例?,android,textview,Android,Textview,我正在使用可扩展文本,基本上是用可绘制文本替换像这样的标记。 这似乎工作得很好,只是我在工作中遇到了困难。 我实际上希望drawable具有超级脚本文本的外观,但我无法让它工作。我在想也许我可以使用DrawableMarginSpan类来设置我的DrawableMarginSpan的底部边距,但这似乎不起作用 文档没有给我任何信息,我已经运行了很多谷歌搜索,但都没有结果。 任何关于如何完成此任务的信息或建议,我将不胜感激。:) 据我所知,DrawableMarginSpan用于在段落的前导添加

我正在使用可扩展文本,基本上是用可绘制文本替换像这样的标记。 这似乎工作得很好,只是我在工作中遇到了困难。 我实际上希望drawable具有超级脚本文本的外观,但我无法让它工作。我在想也许我可以使用DrawableMarginSpan类来设置我的DrawableMarginSpan的底部边距,但这似乎不起作用

文档没有给我任何信息,我已经运行了很多谷歌搜索,但都没有结果。


任何关于如何完成此任务的信息或建议,我将不胜感激。:)

据我所知,DrawableMarginSpan用于在段落的前导添加一个DrawableMarginSpan,同时设置段落相应的前导magrin,因此此跨度不能用于完成您想要的内容

您可以尝试使用替换span,它可以绘制您想要的内容

/**
 * Make drawable as the superscript
 */
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);
仅用于演示,使用时需要优化