정상에서 IT를 외치다

[Android, SpannableStringBuilder] textview 에서 문자 일부 수정 하기 본문

안드로이드

[Android, SpannableStringBuilder] textview 에서 문자 일부 수정 하기

Black-Jin 2018. 4. 20. 14:52
반응형

SpannableStringBuilder 을 사용하면


코드상에서 TextView 에 넣을 문자 일부의 색, 크기, 스타일을 변경할 수 있습니다.


String title = "Black-Jin";
String str = title + "의 티스토리로 놀러오세요";

SpannableStringBuilder ssb = new SpannableStringBuilder(str);
ssb.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length()
, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Style
ssb.setSpan(new ForegroundColorSpan(Color.BLUE), 0, title.length()
, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Color
ssb.setSpan(new AbsoluteSizeSpan(50), 0, title.length()
, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Size

ssb.setSpan(new UnderLineSpan(), 0, title.length()
, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // UnderLine

textView.setText(ssb);


Black-Jin의 티스토리로 놀러오세요 -> Black-Jin의 티스토리로 놀러오세요 


이렇게 바뀝니다.~!~!


사용법은 위와 같고 setSpan 에 대해 좀 더 설명하겠습니다.

/**
* Mark the specified range of text with the specified object.
* The flags determine how the span will behave when text is
* inserted at the start or end of the span's range.
*/
public void setSpan(Object what, int start, int end, int flags) {
setSpan(true, what, start, end, flags, true/*enforceParagraph*/);
}


인자는 위와 같고 start 변수 에서부터 end 변수까지를 what 의 설정으로 변경합니다.



what 은 어떤 변화를 줄 건지 선택하는 값으로


1. 스타일 변경

new StyleSpan(Typeface.BOLD)

글씨 스타일을 변경합니다.


Typeface 의 종류로는 다음 4가지가 있습니다.

public static final int NORMAL = 0;
public static final int BOLD = 1;
public static final int ITALIC = 2;
public static final int BOLD_ITALIC = 3;


2. 색 변경

new ForegroundColorSpan(Color.BLUE)

색을 변경하는 값으로 Color.Blue 처럼 내장되어 있는 함수를 사용하시거나


Color.parseColor("#000000") 와 같이 컬러의 hex 값을 집적 입력해 줘도 됩니다.



3. 크기 변경

new AbsoluteSizeSpan(50)


그냥 숫자를 입력하면 pixel 값으로 들어갑니다. 이를 dp 값으로 변경할려면


/**
* Set the text size to <code>size</code> physical pixels,
* or to <code>size</code> device-independent pixels if
* <code>dip</code> is true.
*/
public AbsoluteSizeSpan(int size, boolean dip) {
mSize = size;
mDip = dip;
}

위와 같은 생성자가 있기 때문에 

new AbsoluteSizeSpan(50, true)

true  값을 넣어주면 dp 로 자동 전환됩니다.




start 는 시작 값으로


Black-Jin의 티스토리로 놀러오세요 에서 맨 앞을 0 부터 해서 한자리씩 증가합니다. 띄어쓰기도 포함이 되는데요   


"B": -> start 가 0 이고


"의" -> start 가 9 이고


"티" -> start 가 11 입니다.




end 는 마지막 값으로


Black-Jin의 티스토리로 놀러오세요 에서 맨 앞을 1 부터 해서 한자리씩 증가합니다. 띄어쓰기도 포함이 되는데요   


"B": -> end 가 1 이고


"의" -> end 가 10 이고


"티" ->  end 가 12 입니다.




마지막으로 Flag 에 대한 설명은 아래 안드로이드 공식 사이트에 맡기겠습니다.


https://developer.android.com/reference/android/text/Spanned.html




- 안드로이드 공식 사이트 설명

https://developer.android.com/reference/android/text/SpannableStringBuilder.html


반응형
Comments