Android WebView로 기존 .html 파일로드


88

를 사용하여 Google 코드의 샘플, 데모 및 기타 리소스를 WebView사용해 보았지만 내 코드로 시도하면 작동하지 않습니다.

myfile.html자산 폴더에 넣고 다음을 사용하여 로드하고 싶습니다 .

private WebView myWebView;

myWebView.loadUrl("file:///android_assets/myfile.html");

에뮬레이터에서 오류 표시

의 웹 페이지를 다음 file:///android_assets/myfile.html으로로드 할 수 없습니다. 요청한 파일을 찾을 수 없습니다. /android_assets/myfile.html

해당 파일을 res/raw/폴더에 넣고 다음을 사용할 때 :

myWebView.loadUrl("file:///android_res/raw/myfile.html");

그런 다음 에뮬레이터 android 2.2 API 레벨 8 만 파일을로드 할 수 있으며 다른 이전 버전에서도 동일한 오류가 표시됩니다. 내가 뭔가 빠졌나요?

모든 API 버전에서 작동하는 애플리케이션 패키지에 기존 .html 파일을로드하는 방법이 있습니까?

답변:


162

그래, 그건 내 아주 어리석은 실수였다. 누군가 같은 문제가있는 경우를 대비하여 여기에 답변을 게시합니다.

자산 폴더에 저장된 파일의 올바른 경로는 file:///android_asset/*(항상 "s"가 있어야한다고 생각했던 자산 폴더에 "s"없음)입니다.

그리고 mWebView.loadUrl("file:///android_asset/myfile.html");모든 API 수준 에서 작동합니다.

mWebView.loadUrl("file:///android_res/raw/myfile.html");API 레벨 8에서만 작동 하는 이유를 아직 파악 하지 못했지만 지금은 중요하지 않습니다.


50
FWIW 나는 그것이 어리석은 실수라고 생각하지 않습니다. 나는 지금 같은 실수를 두 번했다. 직관적이지 않습니다! 먼저 "assets"라는 폴더를 만든 다음 "android_asset"( "s"없음)로 참조 ?? 그것은 어리석은 플랫폼입니다, IMO : P
richtaur 2011 년

3
나쁘게 raw작동하지 않았습니다. 나는에 대한 사용을 할 것이다 raw-de, raw-fr등등합니다. 이제 직접해야합니다.
Martin

나는 laph가 안내하는 동일한 방법을 시도했지만 내 xml 파일을 당신이 언급 한 폴더에 넣었을 때 myWebView.loadUrl ( "file : ///android_res/raw/myfile.xml"); 인터넷 또는 경로가 올바른지 확인하고 myWebView.loadUrl ( "file : //android_res/raw/myfile.xml");을 쓸 때 오류가 발생합니다. 오류는 없지만 아무것도 표시하지 않습니다.
Aditya1510 2011

2
안녕하세요 Aditya, 파일이 .xml이기 때문에 오류가 발생한다고 생각합니다. loadUrl은 .html 파일을로드한다고 가정합니다. 내가 틀렸다면 나를 바로 잡아주세요.
laph

이것이 가능한가? Assets 폴더 자바 스크립트 및 기타 파일, 폴더 고해상도를 포함 / 원시 HTML 파일 포함
user2422690

18

구조가 다음과 같아야하는 경우 :

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

그런 다음 ( Android WebView : 방향 변경 처리 )

    if(WebViewStateHolder.INSTANCE.getBundle() == null) { //this works only on single instance of webview, use a map with TAG if you need more
        webView.loadUrl("file:///android_asset/html/index.html");
    } else {
        webView.restoreState(WebViewStateHolder.INSTANCE.getBundle());
    }

추가하십시오

    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
        webSettings.setAllowFileAccessFromFileURLs(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
    }

그런 다음 URL을 사용하십시오.

<html>
<head>
    <meta charset="utf-8">
    <title>Zzzz</title>
    <script src="../scripts/index.js"></script>
    <link rel="stylesheet" type="text/css" href="../css/index.css">

17

프로젝트 폴더의 assets 폴더에 .html 파일을 붙여 넣으십시오. 다음 코드를 사용하여 레이아웃 폴더에 xml 파일을 만듭니다 : my.xml :

<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/webview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
    />

활동에 다음 코드 추가

setContentView(R.layout.my);
    WebView mWebView = null;
    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("file:///android_asset/new.html"); //new.html is html file name.

6

프로젝트의 자산 폴더에 .html 파일을 복사하여 붙여넣고 onCreate ()의 활동에 아래 코드를 추가하십시오.

        WebView view = new WebView(this);
        view.getSettings().setJavaScriptEnabled(true);
        view.loadUrl("file:///android_asset/**YOUR FILE NAME**.html");
        view.setBackgroundColor(Color.TRANSPARENT);
        setContentView(view);

나를 사로 잡은 트리플 슬래시 ///
Marc

2

html 파일을 수동으로 읽은 다음 WebView의 loadData또는 loadDataWithBaseUrl방법 을 사용 하여 표시 할 수 있습니다.


안녕하세요 Lucho, 귀하의 답변에 감사드립니다. 내 .html 파일을 String으로 변환 한 다음 loadData 또는 loadDataWithBaseUrl 메서드로로드해야한다는 의미입니까?
laph

2
내 .html 파일은 문자열로 빠르게 변환하기에 상당히 큽니다. 절대 경로로로드 할 생각이 있습니까?
laph

2

디버그 컴파일 로부터 다른 릴리스 때문에, 하나

다음과 같은 프로젝트 파일 구조를 고려하십시오 [ 디버그 어셈블의 경우이 경우 ] :

src
  |
  debug
      |
      assets
           |
           index.html

다음과 같이 WebView에 index.html 을 호출해야합니다 .

web.loadUrl("file:///android_asset/index.html");

따라서 릴리스 어셈블의 경우 다음과 같아야합니다.

src
  |
  release
        |
        assets
             |
             index.html

다음 구조는 컴파일 [ 디버그 및 릴리스 ] 모두에서 작동합니다 .

src
  |
  main
     |
     assets
          |
          index.html
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.