TextView autoLink 和 setMovementMethod 都可以工作吗?


这里

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

setMovememtMethod(LinkMovementMethod.getInstance()); 

这将导致实际的HTML标签起作用,例如转到Google。但是,使用后者会导致自动链接无法在同一视图中工作。

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

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

TexView in xml

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

在这里活动.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;
}

相关内容

最新更新