Android 如何在textview中创建所有3种类型的链接

Android 如何在textview中创建所有3种类型的链接,android,textview,Android,Textview,我想让textview中的所有链接都可以点击 示例文本为: "All three should link out http://google.com and <a href="http://google.com">here link</a> and <a href="http://google.com">http://google.com</a>" “这三个都应该链接出来http://google.com 及" 若我对html文本使用Mov

我想让textview中的所有链接都可以点击

示例文本为:

"All three should link out http://google.com  and <a href="http://google.com">here link</a> and <a href="http://google.com">http://google.com</a>"
“这三个都应该链接出来http://google.com  及"
若我对html文本使用MovementMethod,那个么只有第二个和第三个链接是可点击的。 如果我使用Linkify(或两者混合),只有第一个和第二个链接是可点击的


我如何使它们都能点击?

你必须使用反斜杠<代码> \/COD>来描绘<代码> < /Cord>字符,因此字符串不会考虑它作为字符串的最后一点。我是说,当所有文本都在两个代码> >“中时,考虑一个字符串。在你的URL中的字符,因为如果不是,这个字符串会考虑到当他找到一个新的<代码> 字符时,它必须结束,在这种情况下,在你的URL中。
"All three should link out http://google.com  and <a href=\"http://google.com\">here link</a> and <a href=\"http://google.com\">http://google.com</a>"
“这三个都应该链接出来http://google.com  及"

调查之后,我发现Linkify.addLinks()方法从文本中删除当前跨距并应用新跨距一次(基于例如网页url)。因此,我的Html跨距。fromHtml()从一开始就被删除,不再应用

所以我做了以下几点:
1.阅读HTMLHTML.fromHtml中的文本,该文本提供了带有Html跨距的跨距obj。
2.从数组中的html保存跨距
3.Make linkify.addLinks-此方法删除我的旧跨距,因此我必须将其添加回
4.添加旧跨度
5.将文本设置为文本视图

实施:

private void setLabel(){    
    label.setText(linkifyHTML(Html.fromHtml("text with links here"));
    label.setMovementMethod(LinkMovementMethod.getInstance());
    label.setLinkTextColor(getRes().getColor(R.color.link));
}
    private Spannable linkifyHTML(CharSequence text) {
        Spannable s = new SpannableString(text);

        URLSpan[] old = s.getSpans(0, s.length(), URLSpan.class);
        LinkSpec oldLinks[] = new LinkSpec[old.length];

        for (int i = 0; i < old.length; i++) {
            oldLinks[i] = new LinkSpec(old[i], s.getSpanStart(old[i]), s.getSpanEnd(old[i]));
        }

       Linkify.addLinks(s, Linkify.ALL);
       for (LinkSpec span : oldLinks) {
           s.setSpan(span.span, span.start, span.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
       }
       return s;
    }

    class LinkSpec {
        final URLSpan span;
        final int start, end;

        public LinkSpec(URLSpan urlSpan, int spanStart, int spanEnd) {
            span = urlSpan;
            start = spanStart;
            end = spanEnd;
        }
    }
private void setLabel(){
label.setText(linkifyHTML(Html.fromHtml(“此处有链接的文本”));
label.setMovementMethod(LinkMovementMethod.getInstance());
label.setLinkTextColor(getRes().getColor(R.color.link));
}
私有可扩展链接化HTML(字符序列文本){
Spannable s=新SpannableString(文本);
URLSpan[]old=s.getspan(0,s.length(),URLSpan.class);
LinkSpec oldLinks[]=新LinkSpec[old.length];
for(int i=0;i
Man…这是最完美的答案之一!!现在链接显示正确。但不是所有链接都能点击。例如:没有https://或web URL不在标记内。有没有解决方案?它从html字符串中删除了
  • 标记。