[Android, SpannableStringBuilder] textview 에서 문자 일부 수정 하기
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); // Sizessb.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