텍스트뷰에 표시할 내용중 중간중간 스타일을 적용해야 합니다.
아래와 같이요...
내용1
내용2
내용 2-1
내용3
텍스트뷰의 Html.fromHtml 이나 SpannableStringBuilder를 적용하면
다른 스타일은 적용이 되는데.. 한글만 bold가 안먹는군요..
기종에 따라 틀린것인지.. 다른 단말이 없어서 갤럭시s2로만 테스트 해봤습니다.
Html.fromHtml 이나 SpannableStringBuilder에서 한글에 bold를 적용해보신분 혹시 있으신가요?
우선 답변 감사드립니다.
setPaintFlags(TextView.getPaintFlags()|Paint.FAKE_BOLD_TEXT_FLAG);
를 사용할경우 한글도 볼드가 적용이됩니다만 textview 자체가 모두 적용되니다.
저는 텍스트 내용중 특정 부분만 볼드나 언더라인등 다른 스타일을 적용하고 싶은거구요..
개발하다보면 한글때문에 생각지도 못한 문제가 종종 생기는군요.
세종대왕님을 원망하지는 않습니다..ㅠ
안녕하세요.
꼼수를 써서 해결은 한 코드 첨부 드립니다.
TextView에 html로 spanned 된 텍스트를 대입 한 후에 적용된 StyleSpan 중에 style 이 Bold 인 부분의 텍스트 인덱스를 가져와서
해당부분에 새로운 TextView를 생성 후에 ImageSpan으로 대입을 하는 식으로 처리하였습니다.
private void setMessage(ViewHolder holder) {
Spanned spanned = Html.fromHtml("<b>bold text</b> normal text", new ImageGetter(holder.msgText, context), null);
holder.msgText.setText(spanned, BufferType.SPANNABLE);
TextView msgText = holder.msgText;
if (!UIUtils.hasHoneycomb()) {
// 허니콤 이하버전에서 bold 처리가 되지 않는 버그 처리
setSpanTextBoldBelowHoneycomb(msgText, spanned);
}
}
private void setSpanTextBoldBelowHoneycomb(TextView msgText, Spanned spanned) {
StyleSpan[] styleSpans = spanned.getSpans(0, msgText.getText().length(), StyleSpan.class);
if (styleSpans == null) {
return;
}
for (StyleSpan styleSpan : styleSpans) {
if (Typeface.BOLD != styleSpan.getStyle()) {
continue;
}
int start = spanned.getSpanStart(styleSpan);
int end = spanned.getSpanEnd(styleSpan);
TextView textView = (TextView)LayoutInflater.from(context).inflate(R.layout.message_list_item_bold_textview, null);
textView.setPaintFlags(textView.getPaintFlags() | Paint.FAKE_BOLD_TEXT_FLAG);
textView.setText(msgText.getText().toString().substring(start, end));
textView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight());
textView.setDrawingCacheEnabled(true);
textView.buildDrawingCache();
Bitmap boldTextBitmap = Bitmap.createBitmap(textView.getDrawingCache());
Spannable spannable = (Spannable)msgText.getText();
spannable.setSpan(new ImageSpan(context, boldTextBitmap), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setDrawingCacheEnabled(false);
}
}




단말 버그입니다.
http://www.androidpub.com/256912 를 참조하세요.