【发布时间】:2015-05-17 01:02:34
【问题描述】:
我正在使用 Html.fromHtml 在 TextView 中显示一些 HTML,效果很好。
有时这个 html 会有 img-tags,我也想显示这些。
我尝试了Android HTML ImageGetter as AsyncTask,但这似乎很慢且不可预测(图像大小)。
示例 HTML(可能不同...):
<h2>title</h2><br /><p>TEXT</p>
<p style="text-align: center;">Anyways, fokea?.<img src="http://xxxximages/1048268-11-1426170876314.jpg" alt="" /><br /><br /><br /></p>
<p>Jo, veldig mye blomster og duftelys. elt feil sk. Luksus!</p>
<p style="text-align: center;"><img src="http://xxxx/images/1048268-11-1426171000272.jpg" alt="" /></p>
<p><strong>Håper dere har det hakket bedre enn meg.</strong> </p>
我考虑过使用 JSOUP 来获取所有 img-tags,然后创建 X 数量的 ImageView(并用 Picasso 填充它们)。这工作正常,但图像总是在文本的顶部或底部。
替换每个 img-tag 的最佳解决方案是什么,并根据文本在正确的位置为每个 img-tag 创建一个新的 ImageView?
编辑: 好吧,既然没有人有任何建议,我就做了这个又快又脏的。
ArrayList<String> lines = new ArrayList<>();
Scanner scanner = new Scanner(content);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
lines.add(line);
}
scanner.close();
for(int i = 0; i < lines.size(); i++) {
Document doc = Jsoup.parse(lines.get(i));
Elements imgs = doc.select("img");
if(imgs.size() == 0) {
TextView textView = new TextView(this);
textView.setText(Html.fromHtml(lines.get(i)));
maincontainer.addView(textView);
} else {
for(Element el : imgs) {
Element img = el.select("img").first();
String image = img.absUrl("src");
ImageView imageView = new ImageView(this);
imageView.setPadding(0, 10, 0, 10);
imageView.setAdjustViewBounds(true);
Picasso.with(getApplicationContext()).load(image).into(imageView);
maincontainer.addView(imageView);
}
}
}
虽然我确信代码远非最佳,但它看起来和工作起来都很棒。
【问题讨论】:
-
我不太确定您为什么认为这是解决您的问题的一种有价值的方法。关于“慢”,无论图像是在
ImageSpan(<img>标签变成什么)还是ImageView,下载图像都需要时间。关于“不可预测(图像大小)”,这也是您的责任,无论是ImageSpan还是ImageView。您似乎所做的只是增加了复杂性,而没有真正解决您所说的任何一个问题。 -
好的,我确定你是对的,但是当我使用 ImageGetter 加载它时,图像会慢慢弹出,但是当创建一些图像视图并使用 Picasso 加载时,它会立即完成加载。 ..
-
这可能是您在
ImageGetter本身中使用的代码的功能。我猜你在那里使用了高度赞成的答案。这不是很好的代码,如果没有其他原因,就是使用现已弃用的 HttpClient API。 This question 包含使用 Picasso 填充ImageSpans的代码。我会试一试。
标签: android html image replace imageview