IT story

Android WebView로 기존 .html 파일로드

hot-time 2020. 9. 15. 19:24
반응형

Android WebView로 기존 .html 파일로드


를 사용하여 샘플, 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 파일을로드하는 방법이 있습니까?


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

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

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

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


프로젝트 폴더의 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.

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

/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">

프로젝트의 자산 폴더에 .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);

You could read the html file manually and then use loadData or loadDataWithBaseUrl methods of WebView to show it.


The debug compilation is different from the release one, so:

Consider your Project file structure like that [this case if for a Debug assemble]:

src
  |
  debug
      |
      assets
           |
           index.html

You should call index.html into your WebView like:

WebView web=(WebView)findViewById(R.id.web);
web.loadUrl("file:///android_asset/index.html");

The layout:

<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"/>

So forth, for the Release assemble, it should be like:

src
  |
  release
        |
        assets
             |
             index.html  

참고URL : https://stackoverflow.com/questions/4027701/loading-existing-html-file-with-android-webview

반응형