我正在使用spannable文本,基本上用drawables替换这样的标记。 这似乎工作得很好,除了我在安置时遇到困难。 我实际上希望drawable具有超级脚本文本的外观,但我不能让它工作。我想也许我可以使用DrawableMarginSpan类设置我的drawable的底部边距,但这似乎不起作用。
文档没有给我什么,我已经运行了很多谷歌搜索无济于事。 http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html
有关如何实现这一目标的任何信息或建议,我将非常感激。 :)
答案 0 :(得分: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);
仅用于演示,使用时需要优化。