在Android TextView中使用Linkify
在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的问题。
在Android TextView中使用HTML格式化,即使用锚点标签来创建链接。
TextView textView = findViewById(R.id.text_view); String linkText = "Click here"; textView.setText(Html.fromHtml(linkText)); textView.setMovementMethod(LinkMovementMethod.getInstance());
这种方法可以将文本内容中的指定部分转换为可点击的链接。
在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和奇怪的链接识别相关的问题都解决了。