Android

[Android] WebView 영역에 html 문자열을 로드 시키기

내가갈게하와이 2023. 4. 21. 16:40

업무를 하다가 서버에서 받은 데이터를 WebView 영역에 로드할 일이 생겼다. 

 

처음에는 단순하게 WebView.loadData( 로드할 데이터, "text/html; charset=utf-8", "UTF-8" )를 사용하였다. 

 

하지만 오류 발생...!!!

서버에서 내려오는 HTML의 css가 적용되지 않는 것이다. 

 

구선생을 검색하는 와중에 다른 방법의 Api를 사용하여 html 문저열을 로드 시키는 것을 찾을 수 있었다. 

 

바로바로 두구두구....!!!

loadDataWithBaseURL()

 

이 Api는 총 5개의 매개변수를 받을 수 있다. 

public void loadDataWithBaseURL (String baseUrl, 
                String data, 
                String mimeType, 
                String encoding, 
                String historyUrl)

 

각각의 매개변수들은 아래의 역할을 가지고 있다. 

baseUrl String: 페이지의 기본 URL로 사용할 URL입니다. null기본적으로 'about:blank' 인 경우 .
data String: 지정된 인코딩의 데이터 문자열 이 값은 가 될 수 없습니다 null.
mimeType String: 데이터의 MIME 유형(예: 'text/html'). 이 값은 null.
encoding String: 데이터의 인코딩 이 값은 null.
historyUrl String: 기록 항목으로 사용할 URL입니다. null기본적으로 'about:blank' 인 경우 . null이 아닌 경우 유효한 URL이어야 합니다.

 

단순히  html 문자열을 로드 시킨다 하면, 아래와 같이 사용하면 된다. 

loadDataWithBaseURL(null, 로드할 데이터 ,"text/html","utf-8",null)

Google 에서도 loadData() 보다는 loadDataWithBaseURL() 사용을 더 권장한다고 하니, 앞으로 WebView에 데이터를 로드 할    상황이 생긴다면 loadDataWithBaseURL() 사용을 해보자. 

 

loadDataWithBaseURL() 권장하는지는 아래의 사이트 참고. 설명을 잘 해 주고 있다. 

https://goyalnitesh.medium.com/how-to-load-an-html-string-in-a-webview-in-googles-recommended-way-2cd6e8788e3

 

How to load an html string in a WebView in Google’s recommended way

When it comes to loading an html string in a WebView, most of the android developers end up using loadData() API. In fact, if I give a…

goyalnitesh.medium.com

 

 

*업무중에는 서버에서 HTML 태그 문자로 내려오지 않고 ex) </p><p>  처럼 코드로 내려오고 있어서 HTML 태그로 변환하는 작업을 추가 했다. 

loadDataWithBaseURL(null,Html.fromHtml(로드할 데이터).toString(),"text/html","utf-8",null)