我需要在TextView
中进行两种类型的链接。
第一种类型是键入文本的地址。
示例:
http://www.google.com
第二种类型是HTML超链接。
示例:
<a href="http://www.google.com">Google</a>
然后会显示为:
Google
我可以通过设置TextView's
移动方法并使用HTML
对象来完成类型2。
示例:
holder.txtMyText.setMovementMethod(LinkMovementMethod.getInstance());
holder.txtMyText.setText(Html.fromHtml(items.get(position).getText()));
我可以通过将TextView's
autoLink
参数设置为“网络”来完成类型1。
示例:
android:autoLink="web"
问题:
如果我将TextView's
autoLink
参数设置为“web”,则会破坏HTML超链接。它们显示为普通文本,不可点击。如果我删除了autoLink
参数,则输入的地址将不再可用。
如何使两者都有效?
答案 0 :(得分:2)
使用以下正则表达式:
// Match any set of characters starting with `http` but not in `<a></a>` tag
static final String REGEX = "(?!<a[^>]*?>)(http[^\\s]+)(?![^<]*?</a>)";
示例:强>
字符串:
<string name="lorem_ipsum">
Lorem ipsum dolor sit amet <a href="http://www.google.com">Google</a> eirmod tempor.
\n\n\n\n\n\n
At vero eos et accusam et justo duo dolores et ea rebum http://www.google.com clita kasd sed.
</string>
布局:
<TextView
android:id="@+id/lorem_ipsum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lorem_ipsum" />
活性:
TextView tv = (TextView)findViewById(R.id.lorem_ipsum);
Linkify.addLinks(tv, Pattern.compile(REGEX), "http://");
<强>结果:强>
希望这有帮助。
答案 1 :(得分:0)
autoLink
被定义为标志,您可以使用按位或运算符|
=> android:autoLink="web|email"