Android:如何将矢量可绘制图像加载到webview中?

时间:2015-11-05 06:08:02

标签: android webview android-drawable android-resources android-vectordrawable

很抱歉,如果这是重复但是我努力搜索并且还没有找到这个问题......

回到Android的旧时代,您可以将这样的内容添加到WebView的源代码html中:

<img src='file:///android_res/drawable/my.png'/>

它会在WebView中正确显示my.png。但是 - Android现在支持(并且更喜欢我们使用)这些新奇的vector drawables,Android Studio的Vector Asset Studio使得从SVG文件或其他任何内容导入它们变得非常容易。

最棒的是,为了向后兼容,在构建过程中会自动生成.png,以支持各种dpi /屏幕大小以支持旧设备。因此,如果您要定位旧设备,那么就会有.png图片。

如果我能接触他们。因为,据我所知,使用矢量图形确实打破了WebViews中的file:///android_res/drawable/ img个链接。这很奇怪,因为我说有.png文件可以查看,如果它只是看。

我已经考虑了一些方法来解决这个问题,但没有一个方法可以解决这个问题:

  1. 由于.pngs是即时生成的并且包含在.apk中,我想也许我可以用file:///android_res/drawable-hdpi-v4/my.png之类的东西直接指向其中一个生成的文件。 (我检查了.apk文件,以及其中一个是......)但那里没有这样的运气。破碎的图像。

  2. 好的,我想 - 或许可以让WebView直接显示矢量对象。也就是说,WebView可能会识别<img src="file:///android_res/drawable/my_image.xml"/>或类似的东西。我的意思是,Chrome可以渲染svg吗?也许它也支持.xml矢量格式。但这里也没有骰子。 (即使它有效,也不太可能支持旧的预铬webview版本。)

  3. 我尝试的第三件事是在res/drawable中只包含一个xxxhdpi大小的.png,以便webview找到它并希望显示它。不幸的是,这也不起作用。似乎只有/drawable中的.xml向量足以让它阻止png,无论它是/drawable还是/drawable-xxxhdpi目录。

  4. 所以显而易见的问题是:有没有办法让WebView显示向量xml(或生成的相关支持.png)?我们如何在WebView w / Vector drawables中访问HTML中的drawable? ESP。无需以编程方式执行任何操作?

    任何人都知道这应该如何运作?我想下一步要做的是深入研究chrome / android源代码,试图找出file:///android_res/drawable/的工作原理,但这听起来并不好玩,所以如果有人有答案,那将会有所帮助。

    我可能在这里遗漏了一些非常明显的东西。 Thx提前!

    更新:我尝试/排除的其他内容包括(1)删除图像名称中的下划线(因为我认为它们可能被替换为#34; /&#34;),(2){}中各种基本排列{3}}

1 个答案:

答案 0 :(得分:1)

好了,四年后,我想出的最佳解决方案是只有两个矢量文件-(1)应用程序的xml Android矢量文件,然后(2){ Web视图的{1}}格式。与为每个dpi等提供单独的.svg.png相比,这仍然是一个较小的解决方案。

SVG与矢量格式在内部非常相似,因此将一个转换为另一个并不困难。实际上,Android Studio会转换SVG-> XML。如果要采用其他方法,只需比较几个示例。

因此,只需将您的svg放入.gif,然后您就可以使用HTML中的assets/svg/从Web视图进行访问了。

仍然存在存储问题。但是svg相对较小(您可以最小化-例如,从SVG文件中挖出一些webview不会使用的多余的绒毛),所以它并不比其他方法差-在Windows中提供大的二进制图像文件apk。