Android:TextView支持的HTML标签——自定义标签——响应超链接
Android中只支持下列html标签:
Android TextView 支持的HTML标签
<a href="...">
<b>
<big>
<blockquote>
<br>
<cite>
<dfn>
<div align="...">
<em>
<font size="..." color="..." face="...">
<h1>
<h2>
<h3>
<h4>
<h5>
<h6>
<i>
<img src="...">
<p>
<small>
<strike>
<strong>
<sub>
<sup>
<tt>
<u>
<br>  //  换行</br>不可用
那如果我们还要实现一些标签怎么办呢
那则需要自己实现TagHandler接口了。
实现的概要说明:
html span 居中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 = SpanStart(obj);
                veSpan(obj);
                if (where != len) {
                    output.setSpan(new StrikethroughSpan(), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
        }
        private Object getLast(Editable text, Class kind) {
            Object[] objs = Spans(0, text.length(), kind);
            if (objs.length == 0) {
                return null;
            } else {
                for(int i = objs.length;i>0;i--) {
                    if(SpanFlags(objs[i-1]) == Spannable.SPAN_MARK_MARK) {
                        return objs[i-1];
                    }
                }
                return null;
            }
        }
}
 
显示超链接,并响应事件
public class HTMLIMGActivity extends Activity {
    private TextView tv_img;
    String html = "<h1>text3:</h1>"
            +"<font color='#00FF00'>the content is hehe</font><br>"
            +"<a href='le'>link to google~~~</a>";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv_img = (TextView) findViewById(R.id.tv_img);
        URLImageParser p = new URLImageParser(tv_img, HTMLIMGActivity.this);
        Spanned htmlSpan = Html.fromHtml(html, p, null);
        Log.i("hehehe", "spannestring:"+htmlSpan);
        tv_img.setText(htmlSpan);
        tv_img.Instance());//不加这句无法链接,点了无反应
    }
}
要想点击有反应,要注意下列事项:
1:不能设置TextView的android:autoLink属性。
2:必须加上tv_img.Instance());这句。
3:a标签中的地址可以使用<a href='le'>link to google~~~</a>这种形式。
同样也可以使用<a href=\"le\">link to google~~~</a>
 
 响应事件
 
public class MyTagHandler implements TagHandler {
       
        int start;
                                                                                                                                                                                                                                                                                                                                                                                     
        int stop;
                                                                                                                                                                                                                                                                                                                                                                                     
        Context context;
                                                                                                                                                                                                                                                                                                                                                                                     
        int color;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。