Android - webview中的本地图像

Sté*_*tte 53 android image webview android-webview

我正在尝试在我的webview中显示本地图像:

 String data = "<body>" + "<img src=\"file:///android_asset/large_image.png\"/></body>";
 webview.loadData(data, "text/html", "UTF-8");
Run Code Online (Sandbox Code Playgroud)

此代码不显示任何内容,而是:

 webview.loadUrl("file:///android_asset/large_image.jpg");
Run Code Online (Sandbox Code Playgroud)

这个工作,但我需要有复杂的网页,而不仅仅是一张图片.

有任何想法吗 ?

小智 66

在Webview中加载Html文件并将您的图像放入资产文件夹并使用Html读取该图像文件.

<html>
  <table>
    <tr>
      <td>
        <img src="abc.gif" width="50px" alt="Hello">
      </td>
    </tr>
  </table>
</html>
Run Code Online (Sandbox Code Playgroud)

现在在Webview中加载该Html文件

webview.loadUrl("file:///android_asset/abc.html");  
Run Code Online (Sandbox Code Playgroud)

  • 如果图像在资产的其他文件夹中怎么办? (8认同)

Zai*_*Ali 46

你也可以试试

String data = "<body>" + "<img src=\"large_image.png\"/></body>";

webView.loadDataWithBaseURL("file:///android_asset/",data , "text/html", "utf-8",null);
Run Code Online (Sandbox Code Playgroud)


nox*_*oxo 26

一种方便的方法(经常被遗忘)是在HTML内容中使用base64嵌入式图像.这也适用于移动Webkit浏览器(IOS,Android ..).

使用这种方法的关键是你可以在HTML内容上嵌入图像,而不是使用从webview到受限文件系统的图像链接.

  <img src="data:image/jpg;base64,xxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>

  xxxxx = base64 encoded string of images bytes
Run Code Online (Sandbox Code Playgroud)

如果要从文件系统提供(base64嵌入式)图像数据,可以举例如下:

1)在Android中使用ContentProvider - 它将提供base64格式的图像字符串.

<img src="content://.............."/>
Run Code Online (Sandbox Code Playgroud)

2)或者您可以使用JSOUP或类似的DOM解析器(在将其设置为webview之前)预处理HTML并使用正确的base64编码图像调整图像src.

这种方法的缺点是将图像转换为base64字符串所包含的开销,当然还包括将更大的HTML数据转换为webview.

  • 嗨,你能给出一个这整行的例子:<img rel="nofollow noreferrer" src ="content:// .............."/> (2认同)

Vir*_*iya 8

使用此方法.

mview.loadDataWithBaseURL(folder.getAbsolutePath(), content, "text/html", "windows-1252", "");
Run Code Online (Sandbox Code Playgroud)

folder.getAbsolutePath()可以是"file:///android_asset"或只是"/"