使Android支持html 的两个接口

来源:互联网 发布:发布淘宝优惠券的工作 编辑:程序博客网 时间:2024/06/05 18:06

spanned Android

1.fromHtml(String source,int flags)

public static Spanned fromHtml(String source) {        return fromHtml(source, FROM_HTML_MODE_LEGACY, null, null);    }

目前android不支持全部的html的标签,目前只支持与文本显示和段落等标签,对于图片和其他的多媒体,还有一些自定义标签不能识别输入的参数为(html格式的文本)

2.fromHtml(String source, int flags, ImageGetter imageGetter,TagHandler tagHandler)

imageGetter :对图片处理(处理html中的图片标签)

tagHandler :对标签进行处理(相当于自定义的标签处理,在这里面可以处理自定义的标签)

【1】实现ImageGetter获取网络图片

  ImageGetter imgGetter = new Html.ImageGetter() {           @Override           public Drawable getDrawable(String source) {                            Drawable d=null;               try{               URL aryURI = new URL(source);               /* 打开连接 */               URLConnection conn = aryURI.openConnection();               conn.connect();               /* 转变为 InputStream */               InputStream is = conn.getInputStream();               /* 将InputStream转变为Bitmap */               //Bitmap bm = BitmapFactory.decodeStream(is);               /* 关闭InputStream */                             /*添加图片*/                d=Drawable.createFromStream(is, "111");                is.close();                  } catch (IOException e)                  {                    e.printStackTrace();                  }             d.setBounds(1, 1, 45, 45);               return d;           }

【2】实现 自定义的TagHandler
实现的概要说明:

  1. 继承TagHandler接口
  2. 实现
    public void handleTag(boolean opening, String tag, Editable output,
    XMLReader xmlReader)
public class MyHtmlTagHandler implements TagHandler {       public void handleTag(boolean opening, String tag, Editable output,                XMLReader xmlReader) {            if(tag.equalsIgnoreCase("strike") || tag.equals("s")) {                processStrike(opening, output);            }        }        private void processStrike(boolean opening, Editable output) {            int len = output.length();            if(opening) {                output.setSpan(new StrikethroughSpan(), len, len, Spannable.SPAN_MARK_MARK);            } else {                Object obj = getLast(output, StrikethroughSpan.class);                int where = output.getSpanStart(obj);                output.removeSpan(obj);                if (where != len) {                    output.setSpan(new StrikethroughSpan(), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);                }            }        }        private Object getLast(Editable text, Class kind) {            Object[] objs = text.getSpans(0, text.length(), kind);            if (objs.length == 0) {                return null;            } else {                for(int i = objs.length;i>0;i--) {                    if(text.getSpanFlags(objs[i-1]) == Spannable.SPAN_MARK_MARK) {                        return objs[i-1];                    }                }                return null;            }        }}

实际使用和预览效果:

String msg = "1.jsoup<br>&nbsp;&nbsp;&nbsp;<a href=''>https://github.com/jhy/jsoup</a><br>" +                        "2.okhttp<br>&nbsp;&nbsp;&nbsp;<a href=''>https://github.com/square/okhttp</a><br>" +                        "3.banner<br>&nbsp;&nbsp;&nbsp;<a href=''>https://github.com/youth5201314/banner</a><br>" +                        "4.fresco<br>&nbsp;&nbsp;&nbsp;<a href=''>https://github.com/facebook/fresco</a><br>" +                        "5.GalleryPick<br>&nbsp;&nbsp;&nbsp;<a href=''>https://github.com/YancyYe/GalleryPick</a><br>" +                        "6.LRecyclerView<br>&nbsp;&nbsp;&nbsp;<a href=''>https://github.com/jdsjlzx/LRecyclerView</a><br>" +                        "7.FloatingActionButton<br>&nbsp;&nbsp;&nbsp;<a href=''>https://github.com/makovkastar/FloatingActionButton</a><br>" +                        "8.Android Open Source Project<br>&nbsp;&nbsp;&nbsp;<a href=''>https://developer.android.google.cn/license.html</a>";                new AlertDialog.Builder(meAbout.this).setTitle("开源许可").setCancelable(false)                        .setMessage(Html.fromHtml(msg)).setPositiveButton("确定", new DialogInterface.OnClickListener() {                    //此处fromHTML方法当传入html格式的source后,返回Spanned类型的对象                    @Override                    public void onClick(DialogInterface dialog, int which) {                        dialog.dismiss();                    }                }).create().show();

预览效果:
预览效果

原创粉丝点击