【问题标题】:@Android display /res/viewable in WebView@Android 在 WebView 中显示 /res/viewable
【发布时间】:2010-04-13 15:25:20
【问题描述】:

我将 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 中的图像?

【问题讨论】:

  • 我找到了适合我的解决方案。我不知道如何从 /res/drawable 加载图像,但我可以将图像复制到 /assets 并通过 file:///android_asset/my_image.png 引用图像
  • 所以我将 res/drawable/my_image.png 复制到 assets/my_image.png 然后使用

标签: android webview drawable


【解决方案1】:

这在 android 2.2 中有效

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

q1.png 在 res/drawable-hdpi 文件夹中的位置

【讨论】:

  • 摩托罗拉 Zoom 3.2 我必须做到file:/android_res/drawable/app_icon_1.png。但这可能是因为它是通过 Javacode 使用 mWebView.addJavascriptInterface() 插入到 webview 中的。
【解决方案2】:

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

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

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

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

这对你有用吗?

【讨论】:

  • 离题,但 loadUrl 不合适。我正在从我们的一个应用程序下载 HTML 片段,装饰该 HTML,然后将 HTML 发送到视图。对于这个特殊的用例,我得到的 HTML 有一个对象标签来显示一个 FLV。我必须用 FLV 的 MP4 的锚标记替换它。锚标记包含一个图像、一个播放按钮。这个播放按钮是我要加载的资源。 不起作用。
  • 嗯。奇怪的是 如上所述不起作用,但它可能会与起始文件夹的位置混淆。无论如何,从您的 cmets 直接到问题来看,您似乎找到了解决此问题的方法。我很高兴有关资产文件夹的评论有所帮助,即使我走的是另一条路!
  • 虽然 Superfuzz 的解决方案似乎适用于 Android2.2+,但这种方法似乎可以缩减到 Android1.6。在模拟器中测试。顺便说一下史蒂夫·黑利的 +1,如果没有这篇文章,我可能永远不会来到这一轮解决方案。
【解决方案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 图像,如果使用hdpimdpi,我也会得到合适的图像。 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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      自 Android 4.0 起,涉及 file:// URL 的答案可能不再适用。请参阅this question 的回复。一种可行的方法是答案here

      【讨论】:

        【解决方案6】:

        我有完全相同的问题,但既没有将图像文件放在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 - 但它没有出现。有什么想法吗?

        【讨论】:

          【解决方案7】:

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

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

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

          【讨论】:

          • ...访问是指操作、更改、上传和删除的能力。这意味着一旦文件位于可绘制文件夹中,除非您明确删除它并重新编译您的 apk,否则它将始终存在。此外,您的用户将永远无法对图像执行任何操作。
          • 这个答案与在 WebView 中显示带有 HTML 的图像有什么关系?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-15
          • 2012-05-28
          • 2020-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-04
          相关资源
          最近更新 更多