抱歉,如果这是重复的话,但我进行了认真的搜索,但尚未发现此问题。
因此,在过去的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。