HTML 파일을 APK 로컬영역에 두고 로딩을 하려 할 때, Assets 폴더에 넣고, webview.loadUrl()을 하는 것이 일반적입니다.
그러나 이렇게 로딩을 하면 HTML 파일내에 있는 상대경로나 파일들을 다음과 같이 모두 변경해줘야 합니다.
WebView view = new WebView(this); view.getSettings().setJavaScriptEnabled(true); view.loadUrl("file:///android_asset/hello.html"); setContentView(view);
더 큰 문제점은 이 경우 HTML 내부에서 참조하는 이미지 파일 및 CSS파일들의 경우도 모두 "file:///android_asset/"으로 시작하는 절대경로로 맞춰야 합니다.
다음과 같이 HTML 파일과 CSS, IMG 파일들을 폴더형태 그대로 넣고 사용할 수 있습니다.
우선 index.html 파일을 String으로 읽어들입니다.
이렇게 읽어들인 데이터를 myWebView.loadDataWithBaseURL( )로 로딩하면 됩니다.
/** * Gets html content from the assets folder. */ private String getHtmlFromAsset() { InputStream is; StringBuilder builder = new StringBuilder(); String htmlString = null; try { is = getActivity().getAssets().open("index.html"); if (is != null) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while ((line = reader.readLine()) != null) { builder.append(line); } htmlString = builder.toString(); } } catch (IOException e) { e.printStackTrace(); } return htmlString; } /** * Loads html page with the content. */ private void loadHtmlPage() { String htmlString = getHtmlFromAsset(); if (htmlString != null) myWebView.loadDataWithBaseURL("file:///android_asset/", htmlString, "text/html", "UTF-8", null); else Toast.makeText(getActivity(), "html이 없습니다", Toast.LENGTH_LONG).show(); }