17

我将 HTML 扔到 webview 中进行渲染。在 HTML 中,我需要加载我在/res/drawable.

我有/res/drawable/my_image.png这样的代码:

final WebView browser = (WebView) findViewById(R.id.my_webview);
String html = new MyHelper(myObject).getHtml();
browser.loadDataWithBaseURL("", html, "text/html", "UTF-8", "");

字符串html有类似的地方:

<html><head>
<h1>Here is the image</h1>
<img src="my_image.png" />
</head><html>

问题是,该图像src属性应该是什么来引用图像/res/drawable

4

7 回答 7

30

这在android 2.2中有效

<img src = "file:///android_res/drawable/q1.png" />

其中 q1.png 在 res/drawable-hdpi 文件夹中

于 2010-12-02T18:07:33.297 回答
5

我承认我对 WebViews / HTML 了解不多,但似乎您为此采取了更复杂的路线。有一种加载 HTML 文件的简单方法;放到你的assets文件夹下,然后可以参考如下。

WebView webView = new WebView(this);
webView.loadUrl("file:///android_asset/index.html");
setContentView(webView);

显然,您的布局更复杂,因为您拥有的不仅仅是 WebView,因此您不能setContentView()直接使用,但这是基本思想。然后为了引用该 HTML 文件中的图像,我使用了<img>如下标签:

<img src="res/drawable/icon.png"/>

那对你有用吗?

于 2010-04-13T15:50:16.080 回答
3

用户302750,

你的方法不正确。 res/drawable/banner300.jpg应该是file:///android_res/drawable/banner300.jpg

banner300.jpg可以在您的项目中的以下位置之一,android 将自动为您正在使用的设备加载正确的位置。

  • res/drawable/banner300.jpg
  • res/drawable-ldpi/banner300.jpg
  • res/drawable-mdpi/banner300.jpg
  • res/drawable-hdpi/banner300.jpg
  • res/drawable-xhdpi/banner300.jpg

assets文件夹用于您不需要不同版本的通用资源。一个示例可能是 XSL 模板或类似的东西。

MikeNereson,您对您的问题的回答也不正确,可绘制资源应该包含在res目录中。

这是我自己项目中的一个例子。我输出html,就像这样:

<img src="file:///android_res/drawable/stats_btn.png"/>

如果使用ldpi设备,我会得到ldpi图像,如果使用hdpior mdpi,我也会得到合适的图像。Android 解析file:///android_res/drawable/stats_btn.png为我在项目中拥有的以下资源之一。

  • ./res/drawable-ldpi/stats_btn.png
  • ./res/drawable-hdpi/stats_btn.png
  • ./res/drawable-mdpi/stats_btn.png
于 2012-01-06T02:47:32.403 回答
2

根据我的测试路径,“file:///android_res/drawable/q1.png”仅适用于 2.2+。对于给出文件未找到错误的 2.1。将资源移动到资产将起作用,但如果您想利用可绘制功能(这意味着您需要每个文件夹中的图像副本......),这实际上并不可行。

于 2011-03-31T15:19:20.093 回答
2

自 Android 4.0 起,涉及 file:// URL 的答案可能不再适用。请参阅此问题的答案。一种可行的方法在这里的答案中。

于 2012-05-21T10:16:34.637 回答
0

我有完全相同的问题,但既没有放置图像文件res/drawable(我首先必须创建,我已经存在 drawable-hdpi、-ldpi 和 -mdpi),也没有使用file:///asset/对我有用的 URL。

这是我所做的:

活动:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings().setJavaScriptEnabled(true);
        String summary = "<html><body><div style=\"background:red; width:300px; height:50px;\"></div><img src=\"res/drawable/banner300.jpg\"/></body></html>";
        mWebView.loadData(summary, "text/html", "utf-8");

然后res/drawable我放置了banner300.jpg - 但它没有出现。有任何想法吗?

于 2010-06-08T22:53:23.107 回答
-3

您可以像在代码中的其他任何地方一样加载可绘制对象... http://developer.android.com/guide/topics/resources/drawable-resource.html

Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);

同样@MikeNereson 使用Android,您只能直接访问位于资产目录和SDCard 中的原始文件。

于 2011-07-01T19:33:08.447 回答