Załaduj plik HTML do WebView

189

Mam lokalną stronę HTML wraz z kilkoma innymi wskazanymi przez nią zasobami (pliki css i biblioteki JavaScript), które chciałbym załadować do WebView. Jak można to osiągnąć?

Być może nie jest to najlepszy sposób na postępowanie, ale wciąż eksperymentuję.

klaus johan
źródło
dla mnie zadziałało, jeśli upuściłem kropkę html -webView.loadUrl ("file: /// android_asset / filename");
cichy
4
Jest jakiś powód, dla którego nie chcesz zaakceptować odpowiedzi @ Joe?
Klasa A
3
webview.loadUrl („file: ///android_asset/sample.html”); - kliknij tutaj
c49

Odpowiedzi:

350

Najłatwiejszym sposobem byłoby prawdopodobnie umieszczenie zasobów internetowych w folderze zasobów, a następnie wywołanie:

webView.loadUrl("file:///android_asset/filename.html");

Aby uzyskać pełną komunikację między Javą a Webview, zobacz to

Aktualizacja: folder zasobów to zwykle następujący folder: <project>/src/main/assets Można go zmienić w ustawieniach konfiguracji folderu zasobów w <app>.imlpliku jako:

<option name=”ASSETS_FOLDER_RELATIVE_PATH” value=”/src/main/assets” /> Zobacz artykuł Gdzie umieścić folder zasobów w Android Studio

Joe
źródło
6
Ten problem jest naprawdę często zadawanym pytaniem.
shihpeng
2
Prawdopodobnie możesz również załadować go z ciągu, jeśli bardzo nie lubisz korzystać z zasobów ... (patrz stackoverflow.com/questions/4543349/load-local-html-in-webview )
Joe
24
To powinno być oznaczone jako poprawna odpowiedź, bo tak naprawdę jest.
gorodechnyj
6
@ SK9 To samo dotyczy sytuacji, gdy brakuje jakiegokolwiek innego zasobu lub oczekiwanego pliku, na przykład jeśli zmienisz nazwę początkowej klasy aktywności i nie aktualizujesz, AndroidManifest.xmlaby to odzwierciedlić. (Osobiście polecam umieszczenie ścieżki adresu URL / pliku w zasobach łańcucha i dostęp do niego stamtąd, tak aby ścieżka zawierała wszystkie pozostałe dane łańcucha dla programu, ale tak naprawdę nie jest to bezpośrednio związane z kwestią zasobu / zależność od zasobów.)
JAB
7
Jeśli nie wiesz, jak utworzyć folder zasobów, kliknij prawym przyciskiem myszy „aplikacja” -> „Nowy” -> „Folder” -> „Folder zasobów” i kliknij „Zakończ”. Android Studio utworzy folder zasobów we właściwej ścieżce. Musisz tylko przenieść plik HTML do nowego folderu zasobów. Odniesienie: stackoverflow.com/questions/18302603/…
Yuchao Zhou
28

prawdopodobnie ta próbka może pomóc:

  WebView lWebView = (WebView)findViewById(R.id.webView);
  File lFile = new File(Environment.getExternalStorageDirectory() + "<FOLDER_PATH_TO_FILE>/<FILE_NAME>");
  lWebView.loadUrl("file:///" + lFile.getAbsolutePath());
Ajesz
źródło
3
w tamtym przykładzie, który ma html w pamięci zewnętrznej, najlepiej jest go spakować w aplikacji
Jonathan García
1
„file: ///” jest ważny, gdy używasz pliku HTML z lokalnego katalogu urządzenia. Dzięki
ralphgabb,
5

W takim przypadku korzystanie WebView#loadDataWithBaseUrl()jest lepsze niż WebView#loadUrl()!

webView.loadDataWithBaseURL(url, 
        data,
        "text/html",
        "utf-8",
        null);

url: url / path Ciąg wskazujący na katalog wszystkie pliki JavaScript i linki HTML mają swoje pochodzenie. Jeśli null, to około: puste. data: Łańcuch zawierający plik hmtl, odczytany na przykład za pomocą BufferedReader

Więcej informacji: WebView.loadDataWithBaseURL (java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)

Khaintt
źródło
3
Co to jest zmienna danych ? Podaj przykład.
IgorGanapolsky
0

Odpowiedź zaakceptowana nie działa dla mnie. To właśnie dla mnie działa

WebSettings webSetting = webView.getSettings();
    webSetting.setBuiltInZoomControls(true);
    webView1.setWebViewClient(new WebViewClient());

   webView.loadUrl("file:///android_asset/index.html");
Jimale Abdi
źródło
Jaka jest wersja Twojego telefonu komórkowego?
Jimale Abdi