Пример использования DrawableMarginSpan? - PullRequest
3 голосов
/ 27 июля 2011

Я работаю с включаемым текстом, в основном заменяю токены, подобные этому, на drawables.Это, кажется, работает хорошо, за исключением того, что мне трудно с размещением.Я на самом деле хочу, чтобы у рисования был текст Super Script, но я не могу заставить его работать.Я думал, что, возможно, я мог бы использовать класс DrawableMarginSpan, чтобы установить нижнее поле моего рисованного объекта, но это, похоже, не работает.

Документация мне ничего не дает, и я уже запустил много поисков в Google безрезультатно.http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html

Любая информация или предложения о том, как я могу это сделать, будут мне очень благодарны.:)

1 Ответ

0 голосов
/ 06 марта 2015

Насколько я знаю, DrawableMarginSpan используется для добавления рисования к началу абзаца, в то время как устанавливается соответствующий ведущий 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);

Только для демонстрации, нужна оптимизация при использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...