관계, Networking 그리고 Programming

하나의 TextView(EditText)에 서로 다른 크기의 글씨 넣기.

androbook 본캐 2013. 6. 21. 18:31

하나의 TextView 혹은 EditText를 만들어 놓고 안에 넣을 문자열에 여러개의 스타일을 적용하고 싶은 경우가 있다.


나의 경우 하나의 EditText를 만들고 그 안에 현재의 위치 정보를 적는데, 일단 현재 위치의 나라 이름을 보여주고 그 아래쪽으로 좀 더 작은 글씨로 상세 주소를 알려주고 싶었다.


이러한 경우 기존의 다른 코드에서는 SpannableString을 사용했었다. SpannableString의 경우 스트링 내 문자열 위치를 지정해서 스타일을 적용할 수 있다.


아래의 소스 코드처럼 하나의 문자열에 서로 다른 3개의 스타일을 지정할 수도 있다. 



google 서치 결과 일부 발췌 :

...

str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 21, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

...



하지만 Spannable 스트링을 사용하는 것은 문자 하나하나에 서로 다른 스타일을 지정해 줄 수 있는 편리함이 있긴하지만, 뭐랄까 코드가 좀 무거워 보인다.


난 그냥 주요 문장을 강조하고 나머지 상세 정보를 작게 표현하고 싶었다. 마침 구글 서치에서 간단한 방법을 찾았다. html 태그 표현을 사용하는 것이다. 다음의 코드는 내가 원한, 서로 다른 text 사이즈를 표현해준다.



m_et_spot.setText(Html.fromHtml(firstone.getCountryName() + "<br/>: " + "<small>" + s_address + "</small>"));

('firstone.getCountryName()'과 's_address '는 각각 내 코드 내에서 나라이름과 상세주소를 가지고 있는 String을 반환한다.)



위 코드는 다음과 같이 내가 원하는 흡족한 화면을 보여줬다.




html 소스 코딩을 활용하면 되기 때문에 뭐랄까 코딩이 훨씬 수월하다. 내부적으로는 html 클래스를 활용하기 위해 프로그램이 구동되겠지만, 어쨌든 코딩하기에는 훨씬 가벼운 것이 사실이다. 앞으로 이 방법을 종종 사용하도록 해야겠다.