Tải tệp HTML vào WebView


188

Tôi có một trang html cục bộ cùng với một số tài nguyên khác được chỉ ra bởi nó (tệp css và thư viện Javascript) mà tôi muốn tải vào WebView. Làm thế nào điều này có thể đạt được?

Có lẽ không phải là cách tốt nhất để xử lý nhưng tôi vẫn đang thử nghiệm.


đối với tôi nó hoạt động nếu tôi bỏ dấu chấm html -webView.loadUrl ("file: /// android_asset / filename");
tuyệt vời

4
Bất kỳ lý do tại sao bạn không muốn chấp nhận câu trả lời của @ Joe?
ClassA

3
webview.loadUrl ("tệp: ///android_asset/sample.html"); - bấm vào đây
c49

Câu trả lời:


349

Cách dễ nhất có lẽ là đưa tài nguyên web của bạn vào thư mục tài sản, sau đó gọi:

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

Để giao tiếp hoàn chỉnh giữa Java và Webview Xem này

Cập nhật: Thư mục tài sản thường là thư mục sau: <project>/src/main/assets Điều này có thể được thay đổi trong cài đặt cấu hình thư mục tài sản trong <app>.imltệp của bạn dưới dạng:

<option name=”ASSETS_FOLDER_RELATIVE_PATH” value=”/src/main/assets” /> Xem bài viết Nơi đặt thư mục tài sản trong Android Studio


6
Vấn đề này thực sự là một câu hỏi thường gặp.
shihpeng

2
Có lẽ bạn cũng có thể tải nó dưới dạng Chuỗi nếu bạn rất bất lợi khi sử dụng tài sản ... (xem stackoverflow.com/questions/4543349/load-local-html-in-webview )
Joe

24
Điều này nên được đánh dấu là câu trả lời đúng, vì nó thực sự là.
gorodechnyj

6
@ SK9 Áp dụng tương tự nếu bất kỳ tài sản hoặc tệp dự kiến ​​nào bị thiếu, như nếu bạn thay đổi tên của lớp hoạt động bắt đầu và không cập nhật AndroidManifest.xmlđể phản ánh điều đó. (Cá nhân, tôi khuyên bạn nên đặt đường dẫn URL / tệp trong tài nguyên chuỗi và truy cập nó từ đó sao cho đường dẫn đó có tất cả dữ liệu chuỗi khác cho chương trình, nhưng điều đó không thực sự liên quan trực tiếp đến vấn đề tài sản / phụ thuộc tài nguyên.)
JAB

7
Đối với những người không biết cách tạo thư mục tài sản, nhấp chuột phải vào "ứng dụng" -> "Mới" -> "Thư mục" -> "Thư mục tài sản" và nhấp vào "Hoàn tất". Android Studio sẽ tạo thư mục tài sản theo đúng đường dẫn. Và bạn chỉ cần di chuyển tệp html của bạn vào thư mục tài sản mới. Tham khảo: stackoverflow.com/questions/18302603/...
Yuchao Zhou

27

có lẽ mẫu này có thể giúp:

  WebView lWebView = (WebView)findViewById(R.id.webView);
  File lFile = new File(Environment.getExternalStorageDirectory() + "<FOLDER_PATH_TO_FILE>/<FILE_NAME>");
  lWebView.loadUrl("file:///" + lFile.getAbsolutePath());

3
trong ví dụ có html trong bộ nhớ ngoài, tốt nhất nên đóng gói trong ứng dụng
Jonathan García

1
"Tệp: ///" rất quan trọng khi sử dụng tệp HTML từ thư mục thiết bị cục bộ. Cảm ơn
ralphgabb

5

Trong trường hợp này, sử dụng WebView#loadDataWithBaseUrl()là tốt hơn WebView#loadUrl()!

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

url: url / path Chuỗi trỏ đến thư mục tất cả các tệp JavaScript và liên kết html của bạn có nguồn gốc. Nếu null, đó là về: trống. dữ liệu: Chuỗi chứa tệp hmtl của bạn, ví dụ đọc bằng BufferedReader

Thông tin thêm: WebView.loadDataWithBaseURL (java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)


3
Biến dữ liệu là gì? Vui lòng cung cấp một ví dụ.
IgorGanapolsky

0

Câu trả lời được chấp nhận không hoạt động với tôi, Đây là những gì làm việc cho tôi

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

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

Phiên bản di động của bạn là gì?
Jimale Abdi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.