Android 支持html标签以及接口总结

      TextView 不支持所有的html标签,只有部分支持,复杂的需要webView来做

支持的标签有:

  • <a href="...">  定义链接内容
  • <b>  定义粗体文字   b 是blod的缩写
  • <big>  定义大字体的文字
  • <blockquote>  引用块标签 
    • 属性:
      • Common  -- 一般属性
      • cite  -- 被引用内容的URI
  • <br>   定义换行
  • <cite>   表示引用的URI
  • <dfn>   定义标签  dfn 是defining instance的缩写
  • <div align="...">
  • <em>  强调标签  em 是emphasis的缩写
  • <font size="..." color="..." face="...">
  • <h1>
  • <h2>
  • <h3>
  • <h4>
  • <h5>
  • <h6>
  • <i>   定义斜体文字
  • <img src="...">
  • <p>     段落标签,里面可以加入文字,列表,表格等
  • <small>  定义小字体的文字
  • <strike>   定义删除线样式的文字   不符合标准网页设计的理念,不赞成使用.   strike是strikethrough的缩写
  • <strong>   重点强调标签
  • <sub>   下标标签   sub 是subscript的缩写
  • <sup>   上标标签   sup 是superscript的缩写
  • <tt>   定义monospaced字体的文字  不赞成使用.  此标签对中文没意义  tt是teletype or monospaced text style的意思
  • <u>   定义带有下划线的文字  u是underlined text style的意思 
    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;
           }

注:public Drawable getDrawable(String source)
中Source 代表 <img> 标签中的图片路径

【2】       实现 自定义的TagHandler


实现的概要说明:


Step one 继承 TagHandler接口


Step Two 实现
public void handleTag(boolean opening, 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;
            }
        }

}

你可能感兴趣的:(Android 支持html标签以及接口总结)