2011-07-27 55 views
3

我正在使用spannable文本,基本上使用drawables替換了像這樣的標記。 這似乎工作得很好,除了我在展示位置上遇到困難時。 我實際上想讓drawable具有超級腳本文本的外觀,但我無法讓它工作。我在想,也許我可以使用DrawableMarginSpan類設置我的drawable的底部邊距,但這似乎不起作用。DrawableMarginSpan使用示例?

該文檔沒有給我什麼,我已經跑了很多谷歌搜索無濟於事。 http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html

任何信息或建議,我怎麼能做到這一點,我將不勝感激。 :)

回答

0

據我所知,DrawableMarginSpan用於添加一個drawable到段落的主角,同時設置段落的相應的主角magrin,所以這個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); 

只是爲了演示,使用時需要優化。