在TextView中可以使用2种不同类型的链接

时间:2014-10-02 16:20:58

标签: android textview

我需要在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参数,则输入的地址将不再可用。

如何使两者都有效?

2 个答案:

答案 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://");

<强>结果:

Screenshot

希望这有帮助。

答案 1 :(得分:0)

autoLink被定义为标志,您可以使用按位或运算符|

组合多个值

=> android:autoLink="web|email"