2011-07-27 3 views
3

저는 spannable 텍스트로 작업하고 있습니다. 기본적으로이 토큰을 drawable로 대체하십시오. 이것은 게재 위치에 힘든 시간을 보내고 있다는 것을 제외하고는 정상적으로 작동하는 것 같습니다. 실제로 드로어 블이 슈퍼 스크립트 텍스트의 모양을 갖기를 원하지만 작동하도록 할 수는 없습니다. 아마도 DrawableMarginSpan 클래스를 사용하여 드로어 블의 여백을 설정할 수 있다고 생각했는데 작동하지 않는 것 같습니다.DrawableMarginSpan 사용 예?

설명서에 아무것도 표시되지 않고 이미 많은 Google 검색을 사용하지 않았습니다. http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html

이 정보를 얻을 수있는 방법에 대한 정보 나 제안은 감사하겠습니다. :)

답변

0

지금까지 내가, DrawableMarginSpan이 단락의 대응 선도 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); 

그냥 데모, 최적화가 필요합니다.