티스토리 뷰
안드로이드 Spannable에 대해서 알아봅시다.
TextView등에 텍스트와 함께 색상이나, 그림등을 넣어줄수 있는 기능인데요.
그냥 쉽게 텍스트와 기타 내용들이 포함되어 있는것이라고 생각하시면 되겠습니다.
사용방법은 다음과 같습니다.
setSpan(Object what, int start, int end, int flags)
removeSpan(Object what)
start는 Text를 0부터 시작, end는 Text를 1부터 시작해서 읽으면 됩니다.
AAAAAAA 라는 Text가 있을 경우, 2~4번째 Text를 선택하고 싶을 경우에는 setSpan(..., 1, 4)
Object에는 다음을 사용할수 있습니다.
ForegroundColorSpan
BackgroundColorSpan
UnderlineSpan
ClickableSpan
AbsoluteSizeSpan
ImageSpan
RelativeSizeSpan
StyleSpan
URLSpan
AlignmentSpan
BulletSpan
LeadingMarginSpan
LineHeightSpan
QuoteSpan
TabStopSpan
WrapTogetherSpan
SpanWatcher
기타 등등.
flag에는 다음속성을 넣을수 있습니다.
SPAN_앞속성유지여부_뒤속성유지여부
EXCLUSIVE 확장안함
INCLUSIVE 확장함
이렇게만 다른 분들도 적어놓아서, 한참을 찾아보고 테스트 하여 보았습니다.
아무튼 말은 맞습니다. 확장하는것과 안하는것...
이해를 잘 못하였던것은 Text를 다시 넣게되면 Spannable자체도 사라져 버리고 다시 하기 때문에 영향은 없습니다.
그렇지만 다음과 같은 코드로 개발을 하였다고 하면
SpannableStringBuilder builder = new SpannableStringBuilder("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
builder.setSpan(new BackgroundColorSpan(0xffff0000), 7, 11, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(new StyleSpan(Typeface.ITALIC), 1, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
builder.setSpan(new UnderlineSpan(), 12, 17, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
builder.setSpan(new RelativeSizeSpan(0.5f), 12, 17, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(new ForegroundColorSpan(0xff0000ff), 12, 17, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(builder);
builder.insert(17, "CCCCC");
builder.insert(12, "DDDDD");
textView.setText(builder);
insert되어지는 포인트가 17입니다. 그런데 위에보면 UnderlineSpan에 사용된 뒤의 속성 INCLUSIVE때문에 뒤에 CCCCC가 insert되면서
Underline이 추가가 됩니다.
또한 insert되어지는 포인트가 12인데 앞쪽에 설정을 위지하는 부분은 색상을 변경하는 부분이죠.
특별한 상황이 아니라면 주로 EXCLUSIVE_EXCLUSIVE를 사용합니다.
'Mobile > Android' 카테고리의 다른 글
[Android]FragmentPagerAdapter, FragmentStatePagerAdapter의 차이 (0) | 2015.04.14 |
---|---|
[Android]Fragment - empty constructor that is public Exception (0) | 2015.04.02 |
[Android]border 만들기 (0) | 2015.03.30 |
[Android]줄간격 (0) | 2015.03.30 |
[Android]GridLayout (0) | 2015.03.30 |
- Total
- Today
- Yesterday
- github
- war
- Windows
- Java
- ios
- Python
- centos8
- git
- Spring
- windows10
- cocoapods
- SWIFT
- rxswift
- intellij
- Gradle
- docker
- Linux
- php
- enum
- MySQL
- golang
- nodejs
- go
- CentOS
- android
- ubuntu
- Codable
- Xcode
- tomcat
- Kotlin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |