โหลดไฟล์ HTML ลงใน WebView


189

ฉันมีเพจ HTML ท้องถิ่นพร้อมกับแหล่งข้อมูลอื่น ๆ ที่ชี้ (ไฟล์ css และไลบรารี Javascript) ที่ฉันต้องการโหลดลงใน WebView สิ่งนี้จะสำเร็จได้อย่างไร

อาจไม่ใช่วิธีที่ดีที่สุดในการดำเนินการ แต่ฉันยังคงทดลองใช้


สำหรับฉันมันทำงานถ้าฉันลดลงจุด html -webView.loadUrl ("ไฟล์: /// android_asset / ชื่อไฟล์");
quemeful

4
เหตุผลใดที่คุณไม่ต้องการยอมรับคำตอบของ @ Joe?
ClassA

3
webview.loadUrl ( "ไฟล์: ///android_asset/sample.html"); - คลิกที่นี่
c49

คำตอบ:


350

วิธีที่ง่ายที่สุดอาจจะเป็นการใส่ทรัพยากรของเว็บลงในโฟลเดอร์ assetจากนั้นโทร:

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

สำหรับการสื่อสารที่สมบูรณ์ระหว่าง Java และ Webview ดูสิ่งนี้

อัปเดต: โฟลเดอร์สินทรัพย์มักจะเป็นโฟลเดอร์ต่อไปนี้: <project>/src/main/assets สามารถเปลี่ยนแปลงได้ในการตั้งค่าการกำหนดค่าโฟลเดอร์สินทรัพย์ใน<app>.imlไฟล์ของคุณดังนี้:

<option name=”ASSETS_FOLDER_RELATIVE_PATH” value=”/src/main/assets” /> ดูบทความตำแหน่งที่จะวางโฟลเดอร์ทรัพย์สินใน Android Studio


6
ปัญหานี้เป็นคำถามที่พบบ่อยจริงๆ
shihpeng

2
คุณสามารถโหลดเป็นสตริงได้หากคุณไม่ต้องการใช้เนื้อหา ... (ดูstackoverflow.com/questions/4543349/load-local-html-in-webview )
Joe

24
สิ่งนี้ควรถูกทำเครื่องหมายเป็นคำตอบที่ถูกต้อง `เพราะมันเป็นจริง
gorodechnyj

6
@ SK9 เช่นเดียวกันนี้หากมีสินทรัพย์อื่นหรือไฟล์ที่คาดหวังหายไปเช่นถ้าคุณเปลี่ยนชื่อของคลาสกิจกรรมเริ่มต้นของคุณและไม่อัปเดตAndroidManifest.xmlเพื่อแสดงให้เห็น (โดยส่วนตัวแล้วฉันขอแนะนำให้วาง URL / เส้นทางของไฟล์ในทรัพยากรของสตริงและเข้าถึงจากที่นั่นเพื่อให้เส้นทางอยู่กับข้อมูลสตริงอื่น ๆ ทั้งหมดสำหรับโปรแกรม แต่ที่ไม่เกี่ยวข้องโดยตรงกับปัญหาของสินทรัพย์ / การพึ่งพาทรัพยากร)
JAB

7
สำหรับผู้ที่ไม่ทราบวิธีสร้างโฟลเดอร์ทรัพย์สินคลิกขวาที่ "แอพ" -> "ใหม่" -> "โฟลเดอร์" -> "โฟลเดอร์สินทรัพย์" และคลิก "เสร็จสิ้น" Android Studio จะสร้างโฟลเดอร์สินทรัพย์ในเส้นทางที่ถูกต้อง และคุณเพียงแค่ต้องย้ายไฟล์ html ของคุณไปที่โฟลเดอร์สินทรัพย์ใหม่ ข้อมูลอ้างอิง: stackoverflow.com/questions/18302603/…
Yuchao Zhou

28

ตัวอย่างนี้อาจช่วยได้:

  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
ในตัวอย่างมีที่มี html ในหน่วยความจำภายนอกที่ดีที่สุดคือให้มันบรรจุภายในแอปพลิเคชัน
Jonathan García

1
"file: ///" มีความสำคัญเมื่อใช้ไฟล์ HTML จากไดเรกทอรีอุปกรณ์ท้องถิ่น ขอบคุณ
ralphgabb

5

ในกรณีนี้การใช้WebView#loadDataWithBaseUrl()ดีกว่าWebView#loadUrl()!

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

url: url / path สตริงที่ชี้ไปยังไดเรกทอรีไฟล์ JavaScript และลิงก์ html ทั้งหมดของคุณมีที่มา ถ้าว่างมันจะว่างเปล่า data: สตริงที่มีไฟล์ hmtl ของคุณอ่านด้วย BufferedReader

ข้อมูลเพิ่มเติม: WebView.loadDataWithBaseURL (java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)


3
อะไรคือข้อมูลตัวแปร? โปรดระบุตัวอย่าง
IgorGanapolsky

0

คำตอบที่ยอมรับไม่ได้สำหรับฉันนี่คือสิ่งที่ได้ผลสำหรับฉัน

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

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

มือถือของคุณคือรุ่นอะไร
Jimale Abdi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.