2013년 11월 13일 수요일

Android Span, SpannableStringBuilder

이전 블로그에서 이전 함 (원본 글 2013/11/13 작성)

TextView에 입력되는 글자의 style을 바꾸거나 bitmap 등을 추가하고 싶을 경우
Style Span을 사용하여 해결 할 수 있음.

일단 Android developers site에서 확인하면 
CharSequence를 상속받은 Spanned interface가 있고 이것을 상속받는 놈들 중 대표적인 것은 markup 처리를 위한 Spannable interface, text 처리를 위한 Editable interface 가 있다. (사실 자세한 차이를 모르겠다. textview에 html을 입력할때와 일반 character sequence를 입력할 때를 내부적으로 구분해서 처리하는 것 같은데.. 뭐 app 개발자는 SpannableString만 사용하면 되니..)

[Spanned]
 : Spanned interface에 대한 설명, 그리고 Span 생성 시 사용되는 Constants 설명이 있음.

그리고 일반적으로 SpannableString을 만들기 위해서 SpannableStringBuilder가 있다.

[SpannableStringBuilder]

일단 StringBuilder로 text style을 설정하는 간단한 예제는 다음과 같음.

String dispStr = "I'm the first line\nI'm the second line";
        TextView tv = (TextView) findViewById(R.id.textView1);
        int startSpan = dispStr.indexOf("first");
        int endSpan = dispStr.indexOf("line");
        Spannable spanRange = new SpannableString(dispStr);
        TextAppearanceSpan tas = new TextAppearanceSpan(this, android.R.style.TextAppearance_Large);
        spanRange.setSpan(tas, startSpan, endSpan, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.setText(spanRange);

아래는 bitmap 추가하는 예제
SpannableStringBuilder sp = new SpannableStringBuilder("strings, strings");
Bitmap bp = DrawableBitmapCache.getBitmap(url, 500, 500);
sp.setSpan(new ImageSpan(context, bp), 5, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);


사용할 수 있는 style span들은 아래 링크에 나열 되어 있음.
모든 Span에 대해서 설명은 없지만 googling 해보면 다 나올 듯.


AbsoluteSizeSpan 
AlignmentSpan.Standard 
BackgroundColorSpan 
BulletSpan 
CharacterStyleThe classes that affect character-level text formatting extend this class. 
ClickableSpanIf an object of this type is attached to the text of a TextView with a movement method of LinkMovementMethod, the affected spans of text can be selected. 
DrawableMarginSpan 
DynamicDrawableSpan 
EasyEditSpanProvides an easy way to edit a portion of text. 
ForegroundColorSpan 
IconMarginSpan 
ImageSpan 
LeadingMarginSpan.StandardThe standard implementation of LeadingMarginSpan, which adjusts the margin but does not do any rendering. 
LocaleSpanChanges the Locale of the text to which the span is attached. 
MaskFilterSpan 
MetricAffectingSpanThe classes that affect character-level text formatting in a way that changes the width or height of characters extend this class. 
QuoteSpan 
RasterizerSpan 
RelativeSizeSpan 
ReplacementSpan 
ScaleXSpan 
StrikethroughSpan 
StyleSpanDescribes a style in a span. 
SubscriptSpan 
SuggestionSpanHolds suggestion candidates for the text enclosed in this span. 
SuperscriptSpan 
TabStopSpan.StandardThe default implementation of TabStopSpan. 
TextAppearanceSpanSets the text color, size, style, and typeface to match a TextAppearance resource. 
TypefaceSpanChanges the typeface family of the text to which the span is attached. 
UnderlineSpan 
URLSpan 

좀 더 자세한 실 예제는 아래를 참고하면 된다.

[TextView - SpannableStringBuilder 를 이용한 스타일 설정 |작성자 김동학]

[Introduction to Spans]

댓글 없음:

댓글 쓰기