TextView能同时使用autoLink和setMovementMethod吗?

3

这里有许多年来与在TextView中使超链接工作相关的讨论。结论是,autoLink 用于解析仅嵌入文本中的URL,例如“转到 www.google.com”。然后就有

setMovememtMethod(LinkMovementMethod.getInstance()); 

这会导致实际的HTML标记起作用,例如:<a href="http://www.google.com">去谷歌</a>。然而,使用后者会导致autoLink在相同视图中无法工作。

我的问题是,我显示的文本是由用户数据库提供的,所以我无法控制格式。在某些情况下,这个文本具有明文链接,而在其他情况下,它是作为HTML标记输入的。有没有办法让两种类型的链接同时工作?


你能做一些简单的事情,比如解析文本中的<a href=,然后根据它选择其中的一个吗? - Ben P.
是的,那是我的第一個後備方案,但我想知道是否有更懶的方法可以做到。 :-) - gordonwd
1个回答

2
以下代码可以同时支持纯文本链接和带有HTML标签的链接:

在xml中使用TexView

<TextView
android:id="@+id/txt_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:textColorLink="#06b" />

在activity.java中:

String text = "this is the link with anchor tag <a href=\"http://www.google.com\">Google</a>. here is the plain text link http://www.google.com";
    TextView textView = (TextView) findViewById(R.id.txt_view);
    textView.setText(getParsedLinks(text));
    textView.setMovementMethod(LinkMovementMethod.getInstance());

不要在xml中使用android:autoLink="all"或者在代码中使用Linkify.addLinks(textView, Linkify.ALL),而是使用下面的方法将Linkify.addLinks应用于SpannableString。

SpannableString getParsedLinks(String txt){
    Spanned span = Html.fromHtml(txt);
    URLSpan[] urlSpans = span.getSpans(0, span.length(), URLSpan.class);
    SpannableString s = new SpannableString(span);
    Linkify.addLinks(s, Linkify.ALL);
    for (URLSpan urlSpan : urlSpans) {
        s.setSpan(urlSpan, span.getSpanStart(urlSpan), span.getSpanEnd(urlSpan), 0);
    }
    return s;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接