抱歉,如果这是重复的,但我努力搜索并没有找到这个问题......
所以回到过去的 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 文件可供查看。
我想了一些方法来解决这个问题,但没有一个奏效:
由于 .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 版本。)我尝试的第三件事是只包含一个 xxxhdpi 大小的 .png
res/drawable
以便 webview 可以找到它并希望显示它。不幸的是,这也不起作用。看起来只要有一个 .xml 向量/drawable
就足以让它阻止 png,无论它是否在/drawable
or/drawable-xxxhdpi
目录中。
所以显而易见的问题:有没有办法让 WebView 显示矢量 xml(或生成的相关支持 .png)?我们如何在带有矢量可绘制对象的 WebView 中从 HTML 访问可绘制对象?特别是。无需以编程方式执行任何操作?
任何人都知道这应该如何工作?我想接下来要做的是深入研究 chromium/android 源代码以尝试找出其file:///android_res/drawable/
工作原理,但这听起来并不有趣,所以如果有人有答案,那将很有帮助。
我可能在这里遗漏了一些非常明显的东西。提前谢谢!
更新:我尝试/排除的其他事情包括(1)删除图像名称中的下划线(因为我认为它们可能被替换为“/”),(2)loadDataWithBaseUrl()中baseurl的各种排列