安卓:在Webview中显示图片

7
处理完文件后,我得到了一个HTML字符串,其中图片被设置为
<img src="abc.001.png" width="135" height="29" alt="" style="margin-left:0pt; margin-top:0pt; position:absolute; z-index:-65536" />

图片路径不应该被修改,因为我必须从列表中选择文件项。该图片与文件处于同一目录中。我使用loadData/loadDataWithBaseURL加载HTML字符串,但是图片没有显示出来,只看到它的框架。
我该如何解决这个问题?如果我有许多以.001.jpg,.002.png等索引的图像(都在同一个目录中),我能够应用这个解决方案吗?
更新:谢谢,使用loadUrl()语句无论如何命名图片都可以工作。事实上,在加载到WebView之前,我必须读取和处理内容。这就是为什么我使用loadDataWithBaseUrl()语句遇到了麻烦。以下是我的测试项目中读取和显示Test.html内容的代码。
    String res = "";        
    File file = new File(Environment.getExternalStorageDirectory()+"/Test.html");
    try {
        FileInputStream in = new FileInputStream(file);

        if (in != null) {               
            BufferedReader buffreader = new BufferedReader(
                    new InputStreamReader(in));
            String line;
            while ((line = buffreader.readLine()) != null) {
                res += line;
            }
            in.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }       
    wv.loadDataWithBaseURL(null, res, "text/html", "utf-8", null);
  //wv.loadUrl("file://"+Environment.getExternalStorageDirectory()+"/Test.html");

//中的语句是可以工作的,但在我的实际项目中并不能使用。我有一个解决方案:在处理内容后,我必须将其保存在一个临时HTML文件中,然后加载它,那个文件以后会被删除。但是,我仍在寻找更好的解决方案 :)


你是如何初始化 wv 的? - ekkis
这篇帖子可能会对你有所帮助 https://dev59.com/Lp_ha4cB1Zd3GeqPuzJh#65563997 - shobhan
4个回答

9
尝试更改图像文件的名称。我认为这是由于名称中有双点符号。
<img id="compassRose" src="CompassRose.jpg"></img>

this is working for me....

Code:

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.webkit.WebView;

public class StackOverFlowActivity extends Activity {

    private Handler mHandler = new Handler();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        WebView view=(WebView)findViewById(R.id.webView1);
        view.getSettings().setJavaScriptEnabled(true);
        view.loadUrl("file:///android_asset/index.html");
        view.addJavascriptInterface(new MyJavaScriptInterface(), "Android");
    }

    final class MyJavaScriptInterface
    {
        public void ProcessJavaScript(final String scriptname, final String args)
            {             
                mHandler.post(new Runnable()
                    {
                        public void run()
                            {
                                //Do your activities
                            }
                    });
            }
    }
}

index.html:

<html>
<head>
  <title title="Index"></title>                                   
</head>

<body>
  <h2>Android App demo</h2>
  <br /> <img src="CompassRose.jpg" />
</body>
</html>

输入图像描述

结果:

输入图像描述


我又做了一个Android项目,只是为了测试“abc.jpg”这个名称。没有什么不同,WebView只显示图像框架。所以我认为WebView无法识别src部分并不是因为图像名称的原因。不幸的是,我无法在文件中输入图像的完整路径。 - Minh Nguyen
实际上,这种情况发生在一些图片上,但其他的却可以正常工作。我听说这是因为格式不正确的JPEG图像,而WebView无法容忍。 - duckduckgo

3

只需简单使用:

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

1
您的问题与以下行有关:

wv.loadDataWithBaseURL(null, res, "text/html", "utf-8", null);

第一个参数(baseURL)为空。由于某种原因,WebView拒绝加载任何链接的资源,即使您使用绝对URL。如果您将代码更改为以下内容(假设您的图像存储在外部目录中),则可能会发现它可以工作:
wv.loadDataWithBaseURL ("file://" + Environment.getExternalStorageDirectory(), res, "text/html", "utf-8", null);

请记得添加适当的权限,如果您引用网络上的资源:
<uses-permission android:name="android.permission.INTERNET" />

抱歉,回复晚了一点。我在研究一个类似的问题时看到了这篇帖子。

我曾经遇到过同样的问题,我所缺少的只是在 wv.loadDataWithBaseURL ("file://" + Environment.getExternalStorageDirectory(), res, "text/html", "utf-8", null); 中添加 Environment.getExternalStorageDirectory() - Sagar Pilkhwal

0
       WebView webView=(WebView)findViewById(R.id.my_wb);
        String url = "YOUR URL";
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.loadUrl(url);

3
欢迎来到StackOverflow。虽然这个答案可能有效,但请考虑添加更多信息/描述以帮助其他用户理解您的意思。谢谢。 - Jaqen H'ghar
我很想知道如果我有一个<WebView id="my_wb" />R.id.my_wb是如何解析的... R是什么? - ekkis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接