欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android自动解析html带图片,实现图文混排

程序员文章站 2022-08-03 10:05:59
在android中,如何将html代码转换为text,然后显示在textview中呢,有一个简单直接的方法: 然而用的时候却发现html里面的图片没法被被解析出来,别慌,Html还有一个方法: 其中,我们可以自定义imageGetter,这个对象是用于解析html中的图片。 最终调用: textVi ......

在android中,如何将html代码转换为text,然后显示在textview中呢,有一个简单直接的方法:

textview.settext(html.fromhtml(content));

然而用的时候却发现html里面的图片没法被被解析出来,别慌,html还有一个方法:

public static spanned fromhtml(string source, imagegetter imagegetter,taghandler taghandler)

其中,我们可以自定义imagegetter,这个对象是用于解析html中的图片。

 

public class mimagegetter implements html.imagegetter {
    private context c;
    private textview container;

    public mimagegetter(textview text, context c) {
        this.c = c;
        this.container = text;
    }

    @override
    public drawable getdrawable(string source) {
        drawable drawable = null;
        inputstream is = null;
        //source便是图片的路径,如果图片在本地,可以这样做        
is = c.getresources().getassets().open(source); try { typedvalue typedvalue = new typedvalue(); typedvalue.density = typedvalue.density_default; drawable = drawable.createfromresourcestream(null, typedvalue, is, "src"); drawable.setbounds(0, 0, drawable.getintrinsicwidth(),
drawable.getintrinsicheight()); return drawable; } catch (exception e) { system.out.println(e); return null; } }

最终调用:

textview.settext(html.fromhtml(text, new mimagegetter(textview, this), null));

这样便可以实现图文混排了,在该显示图片的地方显示图片。

 

如果是要显示网络上的图片,getdrawable方法可以这样

public drawable getdrawable(string source) {
         final levellistdrawable drawable = new levellistdrawable();
         glide.with(c).load(source).asbitmap().into(new simpletarget<bitmap>() {
             @override
             public void onresourceready(bitmap resource,  
glideanimation<? super bitmap> glideanimation) { if(resource != null) { bitmapdrawable bitmapdrawable = new bitmapdrawable(resource); drawable.addlevel(1, 1, bitmapdrawable); drawable.setbounds(0, 0, resource.getwidth(),resource.getheight()); drawable.setlevel(1); container.invalidate(); container.settext(container.gettext()); } } }); return drawable; }

第三个参数 其作用是把 html 带标记的文本内容字符串转化成可以显示效果的的 spanned 字符串 。由于并非所有的 html 标签都可以转化,所以在使用时,用户需要自己添加一些必要的标签和处理方法时才会使用的。

 

转载请标明出处,维权必究:https://www.cnblogs.com/tangzh/p/10491976.html

参考链接: