我已经下载了网页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。 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呈现的方式。
答案 0 :(得分:1)
从根本上说,你在这里要做的是改变网络内容的呈现方式 - 交换网站编写者(可能是你,我不知道)写的背景是什么。无论如何HTML并不真正支持Web内容的透明背景,因此我唯一能想到的就是通过JavaScript实际编辑Web内容:
myWebView.loadUrl("javascript:document.body.style.backgroundImage=\'\');
document.body.style.backgroundColor=\"#00FF00\");");
(将上面的颜色替换为您选择的颜色),调用WebView加载后将清除HTML上的任何背景,但是当涉及到任何嵌套样式时,您仍然会遇到问题。
至于你的图像问题,你打开所有图像的默认大小并将它们保存在内存中。 WebView为您做的一件事就是保持网页图像的抽象(如缩小)渲染。如果你想修复你的内存占用,你最好的办法就是暂时将图像保存到磁盘上,只有当用户滚动到图像所需的位置时才打开它们 - 这无论如何都不容易,但这是确保您不会溢出分配的堆空间的唯一方法。