[Android] TextView에서 볼드체 쓰기

TextView에서 볼드체를 표현하는 가장 간단한 방법은 다음과 같습니다.

textView.setText(Html.fromHtml("<b>string</b>"));


하지만 이 방법에는 약간의 오버헤드가 있습니다.
ListView에서 사용되는 문자열에 볼드체를 사용하기 위해 이방법을 사용하면
스크롤시 화면이 부드럽게 움직이지 않습니다.
모든 아이템에 미리 생성해논 문자열을 재사용한다면 문제 없겠지만
표현될 컨텐츠에 따라 변화되는 문자열이라면
각 뷰마다 새로 생성된 문자열에 스타일을 적용하는 수밖에 없습니다.
이말은 화면에 표시될 아이템의 갯수만큼 Html 클래스의 파싱 과정이 수행된다는 뜻입니다.
결과적으로 파싱에 따른 오버헤드 때문에 스크롤이 부드럽지 않게 됩니다.

이에 대한 대안으로 SpannableStringBuilder를 사용할 수 있습니다.
사용법은 다음과 같습니다.

SpannableStringBuilder sb = new SpannableStringBuilder();

String str = "test";

sb.append(str);

sb.setSpan(new StyleSpan(Typeface.BOLD), 0,
                                            str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

textView.setText(sb);

사실 Html 클래스도 위와같은 방법을 사용합니다. 하지만 Html 태그를 사용하면 변환 과정에 더불어 파싱 과정이 추가되기 때문에 그만큼 오버헤드가 늘어납니다. 물론 문자열내에 다양한 스타일을 사용하는 경우 위의 방법으로 하나씩 스타일을 적용시키는 것보다 Html클래스가 효율적일 수 있습니다만 ListView 같은 경우 각 아이템마다 파싱 과정이 별도로 이루어지기 때문에 효율이 좋지 않다고 할 수 있겠습니다.