使用TextView解析a标签

我们经常遇到过这样的需求
后台传了一段html过来,比如

我是夏雨,这是我的博客,
更多android技术分享就在这里

我们要显示这段文字,并且获取里面的a标签的点击事件,效果如下
使用TextView解析a标签_第1张图片

其实android自带的textview就能够解析很多标签,只需要简单设置一下

    mTv.setText(Html.fromHtml(url));//解析html
    mTv.setMovementMethod(LinkMovementMethod.getInstance());//设置可点击

使用TextView解析a标签_第2张图片
这样默认是用浏览器打开a标签里面的链接,但是如果要获取到a标签的点击事件和链接的话,得换一个方法

1 .在textview的布局文件里面加入这个属性
android:autoLink="all"
2 .解析(复制下面两个方法)
private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder,
        final URLSpan urlSpan) {
    int start = clickableHtmlBuilder.getSpanStart(urlSpan);
    int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
    int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
        ClickableSpan clickableSpan = new ClickableSpan() {

            public void onClick(View view) {
                //Do something with URL here.
                String url = urlSpan.getURL();
                Toast.makeText(MainActivity.this,url,Toast.LENGTH_SHORT).show();
                System.out.println(url);
            }
//            public void updateDrawState(TextPaint ds) {
//                //设置颜色
//                ds.setColor(Color.argb(255, 54, 92, 124));
//                //设置是否要下划线
//                ds.setUnderlineText(false);
//            }

        };
    clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
}

private CharSequence getClickableHtml(String html) {
    Spanned spannedHtml = Html.fromHtml(html);
    SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
    URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
    for (final URLSpan span : urls) {
        setLinkClickable(clickableHtmlBuilder, span);
    }
    return clickableHtmlBuilder;
}
3 .在代码中使用
mTv.setText(getClickableHtml(url));
mTv.setMovementMethod(LocalLinkMovementMethod.getInstance());

这样就能够有如下效果啦,很简单吧.
使用TextView解析a标签_第3张图片

今天就先这样吧,在后续的文章中我会再总结一下更复杂的标签解析,比如表情,a标签以及超链接同时存在的情况.

虽然这篇文章很简单,但也希望能够给你带来一点点收获 o(∩_∩)o

你可能感兴趣的:(安卓)