阅读更多

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

 

Android支持html 的两个接口

 

1   Spanned android.text.Html.fromHtml(String source)

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

 

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

 

2 Spanned android.text.Html.fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler)
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 代表 标签中的图片路径

 

【2】       实现 自定义的TagHandler

实现的概要说明:

Step one 继承 TagHandler接口

Step Two 实现

public void handleTag(boolean opening, String tag, Editable output,

            XMLReader xmlReader)

 

接口被调用的过程:

 

 系统在解析html文本

发现tag时调用一次 如

接口传递的参数为 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动态加载外部jar包及jar包中图片等资源文件
  3. Android(安卓)的Camera架构介绍
  4. 安卓软硬结合,热点技术实践总结:《Android音频口数据通信开发》 |
  5. android中textview设置为多行文本时,如何让文字从最顶开始显示
  6. android中textview设置为多行文本时,如何让文字从最顶开始显示
  7. android 应用程序不出现在最近打开程序列表里
  8. 短视频平台源码android四种不同的事件实现
  9. Android2.2 API 中文文档系列(2) —— EditText

随机推荐

  1. Android style 的继承
  2. java android(ios)通用aes加密解密
  3. Android "多方向"抽屉
  4. Android实现录屏和截屏功能
  5. android:documentLaunchMode
  6. Android上安装lighttpd+php+mysql
  7. android中的EditView控件
  8. Android学习笔记_12_网络通信之从web获取
  9. Android 中的各种控件
  10. android通话记录的查询与删除