抱歉,如果这是重复的话,但我进行了认真的搜索,但尚未发现此问题。

因此,在过去的Android时代,您可以在WebView的源html中添加如下代码:

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


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

伟大的事情是,为了向后兼容,在生成期间会自动为各种dpi /屏幕尺寸生成.png,以支持较旧的设备。因此,如果您定位的是较旧的设备,则那里有.png图像。

如果我能达到他们。因为据我所知,使用矢量图形确实会破坏WebViews中的file:///android_res/drawable/ img链接。这很奇怪,因为正如我说的那样,如果只是看起来,有.png文件可供查看。

我已经考虑过几种方法来解决此问题,但是没有一种有效:


由于.png是即时生成的,并且包含在.apk中,所以我想也许可以直接使用file:///android_res/drawable-hdpi-v4/my.png之类指向生成的文件之一。 (我检查了.apk文件,这是其中一个文件的位置。。)但是那里没有这种运气。图像损坏。
好的,我想-也许有一种方法可以使WebView直接显示矢量对象。也就是说,也许WebView会识别<img src="file:///android_res/drawable/my_image.xml"/>或类似的东西。我的意思是,Chrome可以渲染svg吗?也许它也支持.xml矢量格式。但是这里也没有骰子。 (即使它可行,也不太可能支持较旧的铬前Webview版本。)
我尝试的第三件事是在res/drawable中仅包含一个xxxhdpi大小的.png,以便Webview可以找到它并希望显示它。不幸的是,这也不起作用。看来,在/drawable中仅具有.xml向量就足以阻止png,无论它位于/drawable还是/drawable-xxxhdpi目录中。


因此,显而易见的问题是:是否有一种方法可以使WebView显示矢量xml(或生成的相关支持.png)?如何在带有Vector可绘制对象的WebView中从HTML访问可绘制对象? Esp。无需通过编程进行任何操作?

任何人都知道这应该如何工作吗?我想接下来要做的是深入研究Chrome / Android源码,尝试找出file:///android_res/drawable/的工作原理,但这听起来并不有趣,所以如果有人有答案,那将会很有帮助。

我可能在这里错过了一些非常明显的东西。提前谢谢!

更新:我尝试/排除的其他事项包括(1)删除图像名称中的下划线(因为我认为它们可能会被“ /”替换),(2)loadDataWithBaseUrl()中baseurl的各种排列

最佳答案

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

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

因此,只需将您的svgs放在assets/svg/中,然后您就可以使用HTML中的<img src='file:///android_asset/svg/mysvg.svg'/>从Web视图进行访问。

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

10-07 19:33
查看更多