将Android资源加载到WebView中

48

我有一个显示漫画书的安卓应用程序。为了利用内置的缩放控件,我正在像这样在一个WebView中加载图片:

webView.loadUrl("file:///android_asset/page1.jpg");
这很好地运作了。然而,由于这些图像在资源文件夹中,它们没有被压缩,这使得我的.apk文件非常大。我想知道如何引用资源文件(从res/drawable文件夹)并像我上面使用assets一样使用文件路径。有人知道那个路径是什么样子的吗?我尝试过诸如"file:///res/drawable/pagetitle.jpg"之类的东西,但没有成功。谢谢帮忙。
更新:
我发现"file:///android_res/drawable/page1.jpg"是我要找的路径。

我认为没有其他直接的方法。但是你可以尝试使用loadData方法。 - the100rabh
7
我不理解您进一步压缩jpg图像的想法。它们已经被压缩了!此外,Android构建工具也不会对res文件夹中的图像进行再次压缩,因为这些工具很聪明,避免了对jpg/png图像进行两次压缩,这没有意义。 - Pointer Null
@PointerNull PNG重新压缩是有很多意义的,请参见http://addyosmani.com/blog/image-optimization-tools/ - 除非将图像伪损失视为现代艺术,否则应避免再次重新压缩有损JPG。 - Philzen
2
@Philzen:我们正在讨论对JPG或PNG进行ZIP压缩,但这是无用的,因为压缩后的JPG或PNG与原始文件大小相同(+-1%)。你的文章讨论的是另外一件事情。 - Pointer Null
2个回答

22

参考这个网站

使用资源ID的格式是:

"android.resource://[package]/[res id]"

Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/" + R.raw.myvideo);

或者,使用资源子目录(类型)和资源名称(没有扩展名的文件名),格式为:

"android.resource://[package]/[res type]/[res name]"

Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/raw/myvideo");

1
我找到了另一种解决方案(请参见更新),虽然我还没有尝试过,但感谢您的回复。 - Amplify91
2
使用android.resource://com.androidbook.samplevideo/" + R.raw.myvideowebView.loadUrl似乎无法正常工作。 - Indrek Kõue
16
在WebView中使用 file:///android_res/raw/myvideo.mp4 - Jeffrey Blattman
2
这是被接受的答案,但我无法看出它如何回答问题。问题是“如何使用文件路径引用资源文件”,但这个答案给出了一个非“file”Uri。问题询问如何加载资源,并展示了使用webView.loadUrl(String)的方法,但这个答案没有说明如何加载资源,而且Uri不能直接传递给loadUrl() - LarsH

6

为了让file:///android_res/drawable/page1.jpg正常工作,我还需要使用loadDataWithBaseURL而不是普通的loadData


这会使用其他限定词如-xhdpi等吗? - urSus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接