본문 바로가기

안드로이드

text 문장 중간에 칼라 또는 스타일 넣어 출력하기

안녕하세요.  

오늘  TextView의  새로운 능력을 알았습니다. 
이미 아시는 분들도 계시겠지만

저한테는  무지 중요한 기능이었는데,   오늘 우연히 찾았습니다. 


인터넷에  다운 받을 수 있는   동영상들 보면,  
영화파일과  smi 라는  자막파일로  보통 돌아 다닙니다. 

smi 자막 파일을 보면,  자막의  칼라를 지정하기 위해서   
html과 동일한 tag 형식으로 칼라나  bold 등의 속성을 넣어 준답니다. 

그런데,   웹브라우져에는  이런것 출력하는 것이  별거 아니지만,  

그냥  App 에서  이것을 구현하려면 상당히 까다롭답니다.  


tag 자체가   사용자가 마음대로 만들 수 있기 때문에  
한 문장에서 모든 글자의  색이 다를 수도 있고,   단어별로 다를 수도 있답니다. 


Win32 API 로  생각하면,  
DrawText 란 API는   이거 사용전에  font 지정을 해 주어야 하기 때문에요. 

최악의 경우,  모든 글자에 대해서  font를 다시 지정해 주어야 하는  문제가 되거든요. 


그런데,   안드로이드의  TextView 가   이런 기능을 자동으로 지원하네요 ^^




코드 먼저 볼까요?  

TextView vt2 = (TextView)findViewById(R.id.textview2);
vt2.setText(Html.fromHtml(getString(R.string.ftest)));

View의  textview2 라는 TextView를 하나 올려 두었습니다.   속성은  특별히 줄것이 없습니다.  


html tag가 들어간  문자을  Html.fromHtml 함수를  읽어서  setText로 전달해 주면 됩니다. 


ftest 는 stringx.xml 에 넣어주었는데요. 이것을  어디가 되어든 중요하지 않구요. 

<font color=aqua>나이지리아</font> <i>라고스</i> <font color="#80FF00">1928년</font><br><font color="#80FFFF">인도, 카라코람 산맥</font>

위 문장을 이클립스에서 넣어주면요.  xml 소스가 아니  string 값 넣어 주는 곳에서요. 

<string name="ftest">&lt;font color=aqua&gt;나이지리아&lt;/font&gt; &lt;i&gt;라고스&lt;/i&gt; &lt;font color=&quot;#80FF00&quot;&gt;1928년&lt;/font&gt;&lt;br&gt;&lt;font color=&quot;#80FFFF&quot;&gt;인도, 카라코람 산맥&lt;/font&gt;</string>

이렇게  들어간답니다. 

이렇게 넣어주고 실행하면요. 

coloredtext.png 

이렇게 보인답니다 ^^

수고하세요!


 
댓글
2009.12.14 16:59:20
itsm02
좋은 정보 감사합니다. 활용을 잘한다면 폰트 구성할 때 좋은 글자로서 화면을 채울수 있을거 같습니다.^^
댓글
2009.12.15 15:46:58
aki
좋은정보감사합니다!! ㅎㅎ
댓글
2009.12.18 18:03:31
id: dingpongdingpong
SpannableStringBuilder를 이용한 방법도 있습니다.^^
http://www.dingpong.net/tt/215 여기 참고하세요.
댓글
2009.12.27 22:46:01
볼레로
좋은 방법이네요 ^^

칼라 지원하기 위해서는  tag 입력 방법이 중요합니다. 
안드로이드에서   tag 가   tag 인지  그냥  <font  를 출력하려는지 구분할 수 있는 방법이 있어야 할테니까 

textview 의  text 값에  tag 문자열을 넣으면  tag로 인식하지 않고  출력할 문자열로 보기 때문에 그냥 화면에 tag 가 보인답니다 ^^
댓글
2009.12.24 18:02:21
향긋한소리
SpannableStringBuilder를 이용하면 동적으로 색을 바꿀 수 있어 좋더라구요..