android 自定义TextView中Html超链接点击事件详解

public class TextHtmlActivity extends Activity {
    private TextView text;
    private Activity mActivty;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.text_html_layout);
        mActivty = this;
        text  = (TextView) findViewById(R.id.text);
        text.setText(Html.fromHtml("<b>text3:</b>  " +
                "Text with a " + "<a href=\"http://www.baidu.com\">link</a> " +
                "点击这个连接---"+
                "<a href=\"http://www.dewen.io/q/1744\">连接</a> "+
                "created in the Java source code using HTML."));
        text.setMovementMethod(LinkMovementMethod.getInstance());
        CharSequence str = text.getText();
        if(str instanceof Spannable){
            int end = str.length();
            Spannable sp = (Spannable)text.getText();  //构建Spannable对象、继承Spanned、Spanned对象继承CharSequener
            URLSpan[] urls=sp.getSpans(0, end, URLSpan.class);  //找出text中的a标签
            //SpannableStringBuilder、SpannableString对象跟String对象差不多、只是比String对象多setSpan,
            //可以给字符串设置样式、大小、背景色...而 SpannableStringBuilder跟SpannableString的关系就跟String跟StringBuffer关系一样
            SpannableStringBuilder style=new SpannableStringBuilder(str);
            style.clearSpans();//should clear old spans
            for(URLSpan url : urls){
                MyClickSpan myURLSpan = new MyClickSpan();
                //设置样式其中参数what是具体样式的实现对象,start则是该样式开始的位置,end对应的是样式结束的位置,
                // 参数 flags,定义在Spannable中的常量
                style.setSpan(myURLSpan,sp.getSpanStart(url),sp.getSpanEnd(url),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
            text.setText(style);
        }

    }
    private class MyClickSpan extends ClickableSpan{
        @Override
        public void updateDrawState(TextPaint ds) {
            ds.setUnderlineText(false);
            super.updateDrawState(ds);
        }
        @Override
        public void onClick(View widget) {
            Toast.makeText(mActivty,"click link",Toast.LENGTH_SHORT).show();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值