Android - webview中的本地图像

时间:2011-05-25 16:25:12

标签: android image webview android-webview

我正试图在我的网页浏览中显示本地图片:

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

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

 webview.loadUrl("file:///android_asset/large_image.jpg");

这个有用,但我需要有复杂的网页,而不仅仅是图片。

有什么想法吗?

11 个答案:

答案 0 :(得分:66)

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

<html>
  <table>
    <tr>
      <td>
        <img src="abc.gif" width="50px" alt="Hello">
      </td>
    </tr>
  </table>
</html>

现在在Webview中加载该Html文件

webview.loadUrl("file:///android_asset/abc.html");  

答案 1 :(得分:46)

您也可以尝试

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

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

答案 2 :(得分:26)

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

使用此方法的一点是,您可以在HTML内容上嵌入图像,而不是使用从webview到受限文件系统的图像链接。

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

  xxxxx = base64 encoded string of images bytes

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

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

<img src="content://.............."/>

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

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

答案 3 :(得分:8)

使用此方法。

mview.loadDataWithBaseURL(folder.getAbsolutePath(), content, "text/html", "windows-1252", "");

folder.getAbsolutePath()可以是"file:///android_asset",也可以是"/"

答案 4 :(得分:2)

我认为您的代码中缺少\

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

答案 5 :(得分:0)

enter image description here

 webView.loadDataWithBaseURL("file:///android_asset/", sourse, "text/html", "UTF-8", null);

答案 6 :(得分:0)

对我来说最好的方法是使用MS word中的所有文本和图像创建我的.html文件,并将文件另存为.html文件并复制.html文件和将相应的附件文件夹放入assets文件夹,并将资产文件夹中.html文件的地址提供给webview.loadUrl() ... 这就是你需要做的......

WebView webview = (WebView) findViewById(R.id.webView1);

webview.loadUrl("file:///android_asset/learning1/learning1.htm");

答案 7 :(得分:0)

Zain's solution为我工作。我忘了添加我的文件夹 www ,其中包含HTML文件以及其他css和图像子文件夹等。

webView.loadDataWithBaseURL("file:///android_asset/www/",data , "text/html", "utf-8",null);

...

答案 8 :(得分:0)

最简单直接的方法是使用html编辑器创建一个html文件,如kompozer或任何你喜欢的。

将您的html文件放在assets文件夹中,然后调用webView.loadUrl(filename)。 assets文件夹还应包含您在html文件中引用的所有图片。

在html文件中提前纠正图像的路径,只记录纯文件名。传递给loadUrl的文件名必须以file:///android_asset/为前缀。

如果图片或文件未加载,请检查空白连字符和其他奇怪内容的文件名并更改文件名。

答案 9 :(得分:0)

我知道问题的答案正确,但是我将以有效的方式实施。

  

第1步在资产文件夹中创建一个HTML文件

ex:-imageLaod.html

注意:这里,在HTML文件中,我们通过提供 style =“ width:100%”

来实现全屏图像
service.bindings.create(binding).then((binding) => {
    console.log(binding);
    // Send a JSON response indicating success
    return {
      status: 200,
      data: {message: 'Binding created!'},
};
  

第2步将您的图片放在素材资源文件夹中。 (例如:yourimage.png)

步骤3在Java文件中放置以下代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
       <title>Load Image</title>
          <style type="text/css">
                h3{
                color:blue;
                }
        </style>   
    </head>
  <body>
        <h3>This image loaded from app asset folder.</h3>
        <img src="yourimage.png" style="width:100%" alt="companylogo"/>
  </body>
</html>

就完成了。您可以看到具有WebView放大功能的全屏图像

希望有帮助。

答案 10 :(得分:0)

除非您具有以下条件,否则图像不会加载:

webSettings.setAllowFileAccessFromFileURLs(true);

如果您使用的是html文件,则该文件应位于/ app / src / main中名为“ assets”的文件夹中。如果没有该文件夹,则进行创建。然后使用以下方法加载html文件:

myWebView.loadUrl("file:///android_asset/test.html");

如果将图像与html文件放在同一文件夹中,则可以在html文件中执行常规操作:

<img src='myimage.jpg' />