상세 컨텐츠

본문 제목

android SpannableStringBuilder

Android

by 잘구운토스트 2016. 12. 5. 01:42

본문

테스트 환경

Android Studio 2.1.2

Target SDK 24 ( Android 7.0 Nougat)



SpannableStringBuilder은 간단히 설명하자면 Text Style을 넣는 기능이라고 생각한다.

주로 setSpan() 사용하여 이 메소드에 대해 설명할 것이다.




what : Text Style을 적용할 span

start : Style을 적용할 텍스트 시작 index

end :  Style을 적용할 텍스트 끝 index

flags : 필자는 모르겠다.



- Style 종류


  color : 덮을 컬러 색상 설정


1
2
3
4
5
6
7
8
9
String text = "SpannableStringBuilder Test";
 
SpannableStringBuilder sb = new SpannableStringBuilder(text);
 
ForegroundColorSpan span = new ForegroundColorSpan(Color.parseColor("#1dafe2"));
sb.setSpan(span, 922, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(sb);
cs


 ForegroundColorSpan 적용 결과 







  size : 크기 설정


  size :  크기 설정

  dip : size를 dip로 설정한 건지 여부


1
2
3
4
5
6
7
8
9
String text = "SpannableStringBuilder Test";
 
SpannableStringBuilder sb = new SpannableStringBuilder(text);
 
AbsoluteSizeSpan span = new AbsoluteSizeSpan(25true);
sb.setSpan(span, 922, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(sb);
cs


AbsoluteSizeSpan 적용 결과 








1
2
3
4
5
6
7
8
9
String text = "SpannableStringBuilder Test";
 
SpannableStringBuilder sb = new SpannableStringBuilder(text);
 
UnderlineSpan span = new UnderlineSpan();
sb.setSpan(span, 922, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(sb);
cs


UnderlineSpan 적용 결과 








1
2
3
4
5
6
7
8
9
String text = "SpannableStringBuilder Test";
 
SpannableStringBuilder sb = new SpannableStringBuilder(text);
 
StrikethroughSpan span = new StrikethroughSpan();
sb.setSpan(span, 922, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(sb);
cs


StrikethroughSpan 적용 결과 







   resourceId : 이미지 리소스 id




1
2
3
4
5
6
7
8
9
String text = "SpannableStringBuilder Test";
 
SpannableStringBuilder sb = new SpannableStringBuilder(text);
 
ImageSpan span = new ImageSpan(this, R.mipmap.ic_launcher);
sb.setSpan(span, 922, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(sb);
cs


ImageSpan 적용 결과 







  gapWidth : bullet과 Text간의 간격 설정


 gapWidth : bullet과 Text간의 간격 설정

 color : bullet 색상 설정


1
2
3
4
5
6
7
8
9
String text = "SpannableStringBuilder Test";
 
SpannableStringBuilder sb = new SpannableStringBuilder(text);
 
// bullet은 start를 0부터 시작해야 적용됨.
sb.setSpan(new BulletSpan(20), 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(sb);

cs


BulletSpan 적용 결과 







  url : 이동 할 url 설정



1
2
3
4
5
6
7
8
9
10
11
12
String text = "SpannableStringBuilder Test";
 
SpannableStringBuilder sb = new SpannableStringBuilder(text);
 
URLSpan span = new URLSpan("http://m.naver.com");
 
sb.setSpan(span, 922, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(sb);
// 이게 없으면 동작하지 않음.
tv.setMovementMethod(LinkMovementMethod.getInstance());







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
String text = "SpannableStringBuilder Test";
 
SpannableStringBuilder sb = new SpannableStringBuilder(text);
 
ClickableSpan span = new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Toast.makeText(this"ClickableSpan", Toast.LENGTH_SHORT).show();
    }
};
 
sb.setSpan(span, 922, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(sb);
// 이게 없으면 동작하지 않음.
tv.setMovementMethod(LinkMovementMethod.getInstance());
// 클릭 press효과 없앰.
tv.setHighlightColor(Color.TRANSPARENT);
cs



URLSpan, ClickableSpan 적용 결과 

URLSpan은 ClickableSpan을 상속받아 만들어졌기 때문에 동작은 같다.


관련글 더보기

댓글 영역