我正在处理可扩展文本,基本上是用drawables替换像这样的标记。
这看起来很好,只是我的位置不太好。
我真的想让它看起来像超级脚本文本,但我不能让它工作。我在想也许我可以用DrawableMarginsPan类来设置我的DrawableMargins的底边距,但这似乎不起作用。
文档什么也没有给我,我已经运行了许多谷歌搜索没有结果。
http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html
任何关于我如何做到这一点的信息或建议,我将不胜感激。:)

最佳答案

据我所知,drawablemarginspan用于在段落的开头添加一个drawable,同时设置相应的段落的开头magrin,所以这个跨度不能用来完成您想要的。
您可以尝试使用replacementspan,它可以绘制您想要的内容。

/**
 * 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);

只是演示,使用时需要优化。

关于android - DrawableMarginSpan用法示例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6849700/

10-09 00:02