在Android TextView中使用Linkify

8 浏览
0 Comments

在Android TextView中使用Linkify

我有一个文本视图,其中的文本是"这是由XYZ开发的产品。有关更多查询,请发送邮件至info@abc.com。"我已经用链接的方式将"info@abc.com"链接化了。但问题是,每当我点击文本视图下方的任何区域时,它都会链接到该电子邮件。我该如何确保只有在点击info@...时才会链接呢?我尝试了使用模式、Linkify.EMAIL_ADDRESS等方法,但似乎都不起作用...请提供一些建议。

0
0 Comments

在Android TextView中,如果想要将文本中的某些单词或短语转化为可点击的链接,可以使用`android:autoLink="web"`属性。然而,这种方法只适用于链接本身就是URL的情况,无法将单词或短语链接到相应的URL。

出现这个问题的原因是`android:autoLink="web"`属性只能识别URL链接,无法将其他文本转化为链接。所以,如果想要将其他文本转化为链接,需要使用其他的解决方法。

解决这个问题的方法是使用`Linkify`类来手动添加链接。`Linkify`是Android SDK中的一个工具类,可以通过正则表达式或者自定义规则将文本中的某些部分转化为链接。

以下是使用`Linkify`来解决问题的示例代码:

TextView textView = findViewById(R.id.text_view);
String text = "This is a sample text with a link to Google.";
SpannableString spannableString = new SpannableString(text);
Pattern pattern = Pattern.compile("Google");
Linkify.addLinks(spannableString, pattern, "http://www.google.com");
textView.setText(spannableString);

在这个示例中,我们首先获取到包含文本的TextView,并创建一个SpannableString对象来保存文本。然后,使用正则表达式`"Google"`来匹配文本中需要转化为链接的部分。最后,使用`Linkify.addLinks()`方法将匹配到的部分转化为链接,并指定链接的URL为`http://www.google.com`。最后,将转化后的SpannableString设置给TextView。

通过这种方式,我们可以手动将任意文本转化为链接,从而解决了`android:autoLink="web"`属性无法将单词或短语链接到URL的问题。

0
0 Comments

在Android TextView中使用HTML格式化,即使用锚点标签来创建链接。

TextView textView = findViewById(R.id.text_view);
String linkText = "Click here";
textView.setText(Html.fromHtml(linkText));
textView.setMovementMethod(LinkMovementMethod.getInstance());

这种方法可以将文本内容中的指定部分转换为可点击的链接。

0
0 Comments

在Android的TextView中使用Linkify功能时遇到了问题,所以我关闭了Linkify功能,并改用将文本格式化为HTML的方式,并加入了以下代码:

TextView textView = (TextView) findViewById(R.id.TextBox);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(Html.fromHtml(strText));

对于邮件链接,使用了以下HTML代码:<a href="mailto:my.com">my.com</a>。这样做可以达到预期效果,但是文本会显示下划线,如何去掉下划线呢?

在这里找到了一种方法:stackoverflow.com/questions/4096851/…。花了我一个小时才弄明白,但是在TextView上调用setMovementMethod方法之前务必要调用setText方法。这是一个很好的例子。

当我移除所有Linkify方法,仅仅使用setMovementMethod()方法(加上clickable等属性)时,所有与HTML文本、Spannable和奇怪的链接识别相关的问题都解决了。

0