免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2128 | 回复: 1
打印 上一主题 下一主题

(android 实战总结)android对html支持接口总结 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-13 17:53 |只看该作者 |倒序浏览
(android 实战总结)android对html支持接口总结






前沿:

项目中往往需要显示一段文本,如果对文本需要特定的效果,就要写自定义的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获取网络图片
  1. 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. 以上代码已经实际检验过,请放心copy
复制代码
注:public Drawable getDrawable(String source)

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



【2】       实现 自定义的TagHandler

实现的概要说明:
  1. Step one 继承 TagHandler接口

  2. Step Two 实现

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

  4.             XMLReader xmlReader)
复制代码
接口被调用的过程:



系统在解析html文本

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

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



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

接口传递的参数为
  1. handleTag(false,”html”,output , xmlReader )
复制代码
下面是一个实际执行的例子 给< strike> 标签 中的文字加上横线
  1. 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;            }        }}
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-11-14 09:07 |只看该作者
希望与ll能多交流
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP