본문 바로가기
안드로이드 자바

[Java][Android] Html.fromHtml() 로 HTML 텍스트 표시하기

by teamnova 2025. 6. 24.
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);
  }
}

 

 

결과화면입니다.