TextView의 디폴트 버퍼 타입은 normal이므로 스팬을 배치할려면 buffertype 속성을 spannable로 지정해야 한다. EditText의 디폴트 버퍼 타입은 편집을 지원하는 editable이므로 별 지정이 없어도 스팬을 배치할 수 있다.
위와 같이 XML을 설정해준다.
실행하게 되면 위와 같은 화면처럼 출력된다.
이제 이것들을 bufferType을 이용하여 다 잘라낼것이다.
위 코딩 내용중 1~7까지는 기울임, 8 ~ 11까지는 빨간색 배경, 12 ~17까지는 밑줄 속성을 부여한다.
에디트 스팬에는 다양한 플래그를 지정하였다. 플래그는 SPAN_앞쪽확장여부_뒤쪽확장여부 식으로 되어 있는데 스팬의 경계 부분에 새 문자가 입력 될때 스팬의 확장 여부를 제정한다.
EXCLUSIVE이면 확장되지 않고 INCLUSIVE이면 확장된다.
espan.setSpan(new StyleSpan(Typeface.ITALIC), 1, 7,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ITALIC체는 둘다 제외이므로 앞뒤로 새 문자를 삽입해도 기울임 속성이 적용되지 않는다.
espan.setSpan(new BackgroundColorSpan(0xffff0000), 8, 11,
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
RED는 둘다 포함이므로 앞뒤로 새 문자를 삽입할때 빨간색으로 삽입된다.
espan.setSpan(new UnderlineSpan(), 12, 17,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
UnderLine은 앞은 미포함이고 뒤에는 포함이므로 뒤에는 밑줄이 적용된다.
BufferType |
buffertype 속성 |
설명 |
NORMAL |
normal |
단순한 문자열이며 읽기 전용이다. |
SPANNABLE |
spannable |
문자열에 부가 정보를 같이 기록한다. |
EDITABLE |
editable |
편집 가능한 문자열이다. |
setSpan 메서드는 문자열의 start와 end 오프셋 사이에 스팬 정보를 설정한다. 설정 대상 정보의 종류가 워낙 많고 사용자가 정의할 수 도 있기 때문에 서식 인수는 Object 타입으로 받는다.