项目中往往需要显示一段文本,如果对文本需要特定的效果,就要写自定义的span,这样的工作量会变得很大,目前android支持html格式的文本,下面就是我对android支持html的程度和使用方式的总结。

Android支持html的两个接口

1Spannedandroid.text.Html.fromHtml(Stringsource)

输入的参数为(html格式的文本)

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

2Spannedandroid.text.Html.fromHtml(Stringsource,ImageGetterimageGetter,TagHandlertagHandler)
Source: 需处理的html文本

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

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

在第二个接口中,在实际应用中,需要处理html中的img为网络图片,同时也需要处理一些自定义的标签 如【视频】,下面我就说明这两块的概要实现

【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;           }

以上代码已经实际检验过,请放心copy

注:public Drawable getDrawable(String source)

中Source 代表 <img> 标签中的图片路径

【2】 实现 自定义的TagHandler

实现的概要说明:

Step one继承 TagHandler接口

Step Two实现

publicvoidhandleTag(booleanopening, String tag, Editable output,

XMLReader xmlReader)

接口被调用的过程:

系统在解析html文本

发现tag时调用一次 如<html>

接口传递的参数为 handleTag(true,”html”,output , xmlReader )

发现tag的闭合时,调用接口

接口传递的参数为 handleTag(false,”html”,output , xmlReader )

下面是一个实际执行的例子 给< strike> 标签 中的文字加上横线

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;            }        }}

更多相关文章

  1. Android中各种JAVA包的功能描述
  2. android TextView XML的一些属性
  3. android TextView的常用属性介绍
  4. Android(安卓)UI优化—常用UI优化技巧
  5. android AIDL服务
  6. Android(安卓)OpenSL介绍 并实现播放PCM功能
  7. 如何扩展Android富文本之Html标签
  8. Android进程间通信 — AIDL
  9. 【Android(安卓)UI控件】EditText属性大全,TextView属性大全

随机推荐

  1. 【Android策略】The content of the adap
  2. android 银联支付接入报nullexception异
  3. Android计时器
  4. Android问题集
  5. Android APK 反编译工具
  6. 编写android拨打电话apk应用实例代码
  7. Android中使用Parcelable传递对象,createF
  8. Android之数据库
  9. android(2)(循环发送短信)
  10. goolge 地图地址位置解析