3

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

所以回到过去的 Android 时代,你可以将这样的内容添加到 WebView 的源 html 中:

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

它会在 WebView 中正确显示 my.png。但是——Android 现在支持(并且更喜欢我们使用)这些新奇的矢量可绘制对象,并且 Android Studio 的Vector Asset Studio使得从 SVG 文件或其他文件中导入它们变得非常容易。

很棒的是,为了向后兼容,在构建过程中会自动生成各种 dpi/屏幕尺寸的 .png,以支持旧设备。因此,如果您的目标是较旧的设备,那里有 .png 图像。

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

我想了一些方法来解决这个问题,但没有一个奏效:

  1. 由于 .png 是即时生成的并包含在 .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. 我尝试的第三件事是只包含一个 xxxhdpi 大小的 .pngres/drawable以便 webview 可以找到它并希望显示它。不幸的是,这也不起作用。看起来只要有一个 .xml 向量/drawable就足以让它阻止 png,无论它是否在/drawableor/drawable-xxxhdpi目录中。

所以显而易见的问题:有没有办法让 WebView 显示矢量 xml(或生成的相关支持 .png)?我们如何在带有矢量可绘制对象的 WebView 中从 HTML 访问可绘制对象?特别是。无需以编程方式执行任何操作?

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

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

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

4

1 回答 1

2

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

SVG 和矢量格式在内部非常相似,因此不难转换。事实上,Android Studio 会转换 SVG->XML。如果你想走另一条路,只需比较几个例子。

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

存储空间仍然存在问题。但是 svg 相对较小(您可以缩小 - 即,在 SVG 文件中挖出一些 webview 未使用的额外绒毛),因此它并不像替代方案那么糟糕 - 在中提供大型二进制图像文件APK。

于 2019-01-31T02:11:19.850 回答