有关获取超链接以在TextView中工作的许多讨论可以追溯到几年。结论是 autoLink 用于解析简单地嵌入文本中的URL,例如"转到www.google.com"。然后有
setMovememtMethod(LinkMovementMethod.getInstance());
会导致实际的HTML代码生效,例如< a href =" http://www.google.com">转到Google< / a> 。但是,使用后者会导致自动链接不在同一视图中工作。
我的问题是我正在显示由用户数据库提供的文本,因此我无法控制格式。在某些情况下,此文本具有纯文本链接,而在其他情况下,它作为HTML标记输入。有没有办法让两种类型的链接同时工作?
答案 0 :(得分:0)
纯文本链接和带有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;
}