阅读更多

项目中往往需要显示一段文本,如果对文本需要特定的效果,就要写自定义的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中textview设置为多行文本时,如何让文字从最顶开始显示
  3. Android开发中 AndroidManifest.xml配置之service,receiver标签配
  4. Android rest接口
  5. Android设置显示文本
  6. android限制文本长度
  7. Android TextView多行文本滚动实现
  8. Android 在界面中显示以及输入文本信息 TextView和EditText
  9. android 常用api 接口签名验证

随机推荐

  1. Android中向服务器上传图片
  2. 关于CoordinatorLayout展开与折叠相关属
  3. android 开发中判断网络是否连接的代码
  4. 很好的资源学习入口_android
  5. android系统学习笔记二
  6. xml-----属性收集
  7. Android-TCPDump for Android(抓TCP数据包
  8. Android(安卓)Android.mk 文件一点感悟
  9. Android中AIDL详解
  10. Android的布局管理器与java中的实现方式