728x90
안녕하세요
안드로이드 앱을 개발하다 보면 웹에서 가져온 콘텐츠나 특정 서식이 적용된 텍스트를 TextView에 보여줘야 할 때가 있습니다.
단순히 텍스트만 보여주는 것을 넘어, 볼드, 이탤릭, 색상, 목록 등 HTML 태그가 적용된 서식을 그대로 유지하면서 표시하고 싶을 때가 있죠. 이럴 때 유용하게 사용할 수 있는 것이 바로 Html.fromHtml()메소드입니다.
Html.fromHtml() 이란?
Html.fromHtml()은 HTML 소스 문자열을 Android에서 렌더링할 수 있는 Spanned 객체로 변환해주는 메소드입니다.
이를 통해 복잡한 HTML 파싱 로직 없이도 TextView가 HTML 태그를 해석하여 적절한 서식을 적용하도록 할 수 있습니다.
(주의: Html.fromHtml()은 모든 HTML 태그를 지원하지 않습니다. 주로 기본적인 텍스트 서식 태그(예: <b>, <i>, <u>, <font>, <p>, <li>, <a> 등)에 최적화되어 있습니다. 복잡한 CSS 스타일이나 자바스크립트 등은 지원하지 않으므로 웹 뷰(WebView) 사용을 고려해야 합니다.)
전체 코드입니다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/html_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:textSize="18sp"
android:textColor="@android:color/black"
android:padding="8dp"
android:background="#F0F0F0"
tools:text="HTML 텍스트가 여기에 표시됩니다."/>
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private TextView htmlTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
htmlTextView = findViewById(R.id.html_text_view);
// 표시할 HTML 문자열 정의
String htmlContent = "<h2><b>HTML 텍스트 예시</b></h2>" +
"<p>이것은 <i>일반적인 단락</i>입니다. " +
"여기에 <u>밑줄</u>과 <font color=\"#FF0000\">빨간색 텍스트</font>가 있습니다.</p>" +
"<p><b>목록 예시:</b></p>" +
"<ul>" +
"<li>항목 1</li>" +
"<li>항목 2</li>" +
"</ul>" +
"<p><small>작은 글씨</small>와 <sup>윗첨자</sup> 그리고 <sub>아래첨자</sub>도 가능합니다.</p>";
// Html.fromHtml()을 사용하여 HTML 문자열을 Spanned 객체로 변환
Spanned spannedText;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// API 24 이상에서는 FromHtmlFlags.FROM_HTML_MODE_COMPACT 사용 권장
// 더 엄격한 HTML 파싱 모드를 적용합니다.
spannedText = Html.fromHtml(htmlContent, Html.FROM_HTML_MODE_COMPACT);
} else {
// API 23 이하에서는 deprecated된 메소드 사용
spannedText = Html.fromHtml(htmlContent);
}
// TextView에 변환된 Spanned 텍스트 설정
htmlTextView.setText(spannedText);
}
}
결과화면입니다.
'안드로이드 자바' 카테고리의 다른 글
[Java][Android] AssetManager를 활용하여 앱 내 에셋 파일에 접근하기 (0) | 2025.07.01 |
---|---|
[Java][Android] Hilt 활용 예시 만들기 (2) | 2025.06.28 |
[Java][Android] ViewFlipper 사용해서 뷰 전환 애니메이션 구현하기 (1) | 2025.06.17 |
[Java][Android] Material CalendarView 사용하여 달력 표시하기 (0) | 2025.06.10 |
[Java][Android] Timber 활용 예시 만들기 (1) | 2025.06.06 |