使用正则表达式突出显示文本中的链接Linkify vs Patterns

问题描述

为什么,使用这种方法,我们将只使用最后一种模式:

Linkify.addLinks(someSpannable,Linkify.PHONE_NUMBERS)
Linkify.addLinks(someSpannable,Linkify.EMAIL_ADDRESSES)

在这种情况下,电话和电子邮件链接都将突出显示

Linkify.addLinks(someSpannable,Patterns.PHONE,null)
Linkify.addLinks(someSpannable,Patterns.EMAIL_ADDRESS,null)

解决方法

基于文档: https://developer.android.com/reference/android/text/util/Linkify#addLinks(android.text.Spannable,%20int)

public static final boolean addLinks (Spannable text,int mask)

扫描提供的 Spannable 的文本并将掩码中指示的所有链接类型的出现转换为可点击的链接。 如果掩码不为零,它还会删除附加到 Spannable 的任何现有 URLSpans,以避免在同一文本上重复调用它时出现问题。

另一方面 https://developer.android.com/reference/android/text/util/Linkify#addLinks(android.text.Spannable,%20android.text.style.URLSpan%3E)

public static final boolean addLinks (Spannable text,int mask,Function<String,URLSpan> urlSpanFactory)

扫描提供的 Spannable 的文本并将掩码中指示的所有链接类型的出现转换为可点击的链接。如果掩码不为零,它还删除附加到 Spannable 的任何现有 URLSpans,以避免在同一文本上重复调用它时出现问题