我使用html.fromhtml来获取描述标记(在feed xml中)的内容,它工作得很好
描述标签:
<description><![CDATA[<div class="K2FeedIntroText"><p><img style="margin: 10px; float: left;" alt="block curta" src="http://loc.grupolusofona.pt/images/stories/destaques/block%20curta.jpg" height="110" width="120" />Quatro Horas Descalço é o nome da curta-metragem, realizada por Ico Costa, que se estreia mundialmente no 7.º Festival Internacional de Cinema de Roma, nos dias 12 e 13 de novembro, em competição no Cinema XXI.</p>
]]>
但当我查看documentation时,它显示:
Returns displayable styled text from the provided HTML string. Any <img> tags in the HTML will display as a generic replacement image which your program can then go through and replace with real images.
所以我的问题是:我如何才能做到上面所说的“你的程序可以通过并替换成真实的图像”?
我知道如何使用模式通过regex获取img url,我只想知道如何使用类“遍历并用图像替换它”
如果我不清楚,请说点什么,我会尽量解释清楚的。
编辑:
好吧,我正试图在一个简单的rss阅读器中实现这一点(并试图让它尽可能简单地以代码为基础)
我使用一个dom解析器,使用一个
map = HashMap<String, Spanned>
来存储每个子节点的值,以及一个KEY
:map.put(KEY_DESC, Html.fromHtml(parser.getValue(e, KEY_DESC)));
在回答的注释中,我发现了一个有用的link,从中我创建了一个新类(urlimageparser),并试图像这样使用它:
map.put(KEY_DESC, htmlSpan);
其中
htmlSpan
是:this.textView = (TextView)this.findViewById(R.id.textview);
URLImageParser p = new URLImageParser(textView, this);
Spanned htmlSpan = Html.fromHtml(html, p, null);
textView.setText(htmlSpan);
我还创建了一个
android:visibility="gone"
textview,以防它需要在textview中存储值(可能我解释错了)我最初的想法是
htmlSpan
是Spanned
类型,所以它很适合我的hashmap。为了上传到ListView,我使用了一个类似的
SimpleAdapter
: ListAdapter adapter = new SimpleAdapter(this, menuItems, R.layout.linhafeed,
new String[] { KEY_TITLE, KEY_DESC, KEY_PUBDATE, KEY_LINK },
new int[] { R.id.title, R.id.desc, R.id.pub, R.id.link });
其中
menuItems
是ArrayList<HashMap<String,Spanned>>
我这里出什么事了?
最佳答案
Html.fromHtml(...)
将用<img ... />
和特殊'object replacement character' (\uFFFC)替换任何ImageSpan
标记。
要显示实际图像,看起来有两个选项:
实现一个ImageGetter
,它返回要显示为Drawable
的图像。如果我没记错的话,这将不允许您将映像加载卸载到其他线程,因为它希望立即返回结果。因此,这应该足以满足本地资源(也可能是设备本地存储中的任何资产,前提是不需要潜在的长时间运行操作;即缩放、裁剪、应用效果等)。
对Spanned
结果执行第二次传递,并替换任何\uFFFC
事件。您应该能够使用ImageSpan
方法从每个getSource()
获取图像的源(url)。不幸的是,加载后似乎没有任何setter来更新Drawable
,所以我猜您可能需要用新的setter替换ImageSpan
,并在构造函数中传递加载的图像。
第三种方法是使用WebView
而不是TextView
,这可能比上面的方法重一些。这样您就不必自己处理任何图像加载,因为它内置在小部件中。