TextView autoLink和setMovementMethod都可以工作

时间:2017-10-23 17:13:04

标签: android

有关获取超链接以在TextView中工作的许多讨论可以追溯到几年。结论是 autoLink 用于解析简单地嵌入文本中的URL,例如"转到www.google.com"。然后有

setMovememtMethod(LinkMovementMethod.getInstance()); 

会导致实际的HTML代码生效,例如< a href =" http://www.google.com">转到Google< / a> 。但是,使用后者会导致自动链接在同一视图中工作。

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

1 个答案:

答案 0 :(得分:0)

纯文本链接和带有HTML标记的链接可以使用以下代码

xml中的T​​exView

<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;
}