DrawableMarginSpan使用示例?

3
我正在处理Spannable文本,基本上是用drawable替换标记,例如这样^。 尽管看起来很好用,但是我在放置方面遇到了一些麻烦。 实际上,我希望Drawable具有Super Script文本的外观,但是我无法做到。我想也许我可以使用DrawableMarginSpan类来设置我的Drawable的底部边距,但是这似乎不起作用。
文档没有给我任何信息,我已经进行了多次谷歌搜索,但都没有结果。 http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html 如果您能提供任何信息或建议,我将不胜感激。 :)
1个回答

0
据我所知,DrawableMarginSpan用于在段落前面添加一个可绘制的对象,并设置相应的前导边距,因此这个 Span 不能实现你想要的功能。
你可以尝试使用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);

仅用于演示,使用时需要优化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接