我已经下载了网页html和其中的图像。现在,我试图将它们展示给用户。我已经尝试了两种不同的方法,并且不确定哪个最适合使用。两者都有他们的问题。试图加载下载的网页和图像
首先,我试着用下面的代码文本视图:
TextView content = (TextView)findViewById(R.id.article_content);
MyImageGetter mig = new MyImageGetter(this, urlId);
Spanned span = Html.fromHtml(contents, mig, null);
content.setText(span);
我真的很喜欢这是如何工作的,但有两个问题。第一个,也是最困难的是,当一篇文章有很多图像时,我会得到OutOfMemory fc's。 MyImageGetter代码如下
public class MyImageGetter implements Html.ImageGetter{
String urlId = null;
Context c = null;
public MyImageGetter(ArticleViewer articleViewer, String urlId2) {
c = articleViewer;
urlId = urlId2;
}
public Drawable getDrawable(String source) {
String[] brokenUrl = source.split("/");
String imgName = brokenUrl[brokenUrl.length-1];
File image = new File("/data/data/com.that1dev.RibbonReader/Offline/" + urlId + "/" + imgName);
Log.w("MyApp", image.getAbsolutePath());
Bitmap bm = BitmapFactory.decodeFile(image.getAbsolutePath());
Drawable d = new BitmapDrawable(c.getResources(), bm);
d.setBounds(0,0, d.getIntrinsicWidth(),d.getIntrinsicHeight());
return d;
}
}
另一个问题是textview根据用户选择和设备方向有不同的宽度。如果视图中的图像大于文本视图宽度,则会简单地进行裁剪。但是,我相信我可以自己解决这个问题,而不会太困难。我只是没有尝试过,因为我试图先解决内存问题。但是,任何协助都将不胜感激。
我试过的另一种方法是webview。
WebView webContent = (WebView)findViewById(R.id.web_content);
webContent.loadDataWithBaseURL("", contents[1], "text/html", "utf-8", "");
webContent.setBackgroundColor(Color.TRANSPARENT);
不幸的是,无论我尝试什么,背景都保持白色,并且令人难以置信的难看。我似乎无法找到适用于3.0和4.0的解决方案。
如果我有选择,我真的很喜欢TextView方法的工作,因为我更喜欢它的外观与WebView呈现的东西的方式。
webview图像和textview图像如何不同大小?这两个都是在图像加载大约300x500。 webview如何进一步缩小呢?其他应用程序能够完成这一点(透明的网络视图或内存安全的文本视图),并且这种做法已经足够普遍(几乎每个离线rss阅读器),我不会想象它会非常困难。 – 2012-04-07 20:29:46
我不确定这一点,但我认为webview正在抽取图像以在屏幕上显示它们 - 它可能不是。但是,当然最大的问题是如果你能避免它们,就不要一次把它们都放在内存中。它也可能有助于在清单中将您的应用程序标记为需要超过默认堆空间 – JRaymond 2012-04-07 20:41:04
感谢关于堆空间的提示。这就是我所寻找的诀窍。这看起来是处理如此大量图像的唯一方法。如果可以的话,我仍然会尝试让webview工作,因为我无法使用这么多内存,但目前为止这很棒。 – 2012-04-07 21:30:47