Android Linkify 电话号码 - 如何指定要链接的号码和不链接的号码
Posted
技术标签:
【中文标题】Android Linkify 电话号码 - 如何指定要链接的号码和不链接的号码【英文标题】:Android Linkify Phone Numbers - how to specify which numbers to link and which not to 【发布时间】:2021-01-25 06:56:50 【问题描述】:我正在用 Java 编写一个 android 应用程序,它显示与西班牙有关的信息,包括电话号码。
我正在使用 Linkify 使这些电话号码在使用此代码显示时可链接
Linkify.addLinks(textViewPlaceNotesDetailView, Linkify.PHONE_NUMBERS);
这很好用。
我的问题是其他数字也显示为链接,即。就像 1965 年一样。
如何防止这种情况发生?我只希望电话号码成为链接。
注意。我想为号码指定最小长度,在本例中为 9(西班牙电话号码为 9 位,格式为“xxx xxx xxx”)。但我一直无法弄清楚如何做到这一点。
【问题讨论】:
试过这个吗? ***.com/questions/27927930/… @Sajjad 感谢您的建议,我看到了这个问题,但对我没有帮助。我的链接适用于电话号码,我想阻止它们适用于其他号码。该问题中的信息似乎也已过时。 【参考方案1】:您可以使用自定义regex
来链接电话号码。
tv.setLinksClickable(true);
//only find phone number
//Pattern phoneNumberPattern = Pattern.compile("\\d3\\s\\d3\\s\\d3");
//find phone number or web url
Pattern phoneNumberPattern = Pattern.compile("(\\d3\\s\\d3\\s\\d3)|((https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|])");
Linkify.addLinks(tv, phoneNumberPattern,"");
提供的regex
正在检测适用于您的情况的 xxx xxx xxx 数字格式和网址。
【讨论】:
感谢@Sajjad,我已经实现了以下功能,但我的电话号码现在不是链接:textViewPlaceNotesDetailView.setLinksClickable(true); Pattern phoneNumberPattern = Pattern.compile("\\s?(?:6[0-9]|7[1-9]|8[1-9]|9[1-9])[0-9]\\s?[0-9]3\\s?[0-9]3$"); Linkify.addLinks(textViewPlaceNotesDetailView, phoneNumberPattern,"");
;我需要在 TextView 中使用一些特定的 XML 格式吗_
好吧,显然你必须使用正确的正则表达式。我更新了我的答案并使用了另一个正则表达式。试试吧! @GearóidóCeallaigh
太好了,以上内容非常适合电话号码和年份。但是,如果我在它之后添加Linkify.addLinks(textViewPlaceNotesDetailView, Linkify.WEB_URLS);
以链接网址,那么我的电话号码不再是链接。如何将两者结合起来?
添加了正则表达式以查找电话号码和网络 URL。您可以通过一些搜索自己找到它。 @GearóidóCeallaigh
编辑您的问题标题并将“Web urls”添加到您问题的标题和正文中。【参考方案2】:
改用 LinkifyCompat 似乎已经解决了这个问题。
我现在使用的代码是:
LinkifyCompat.addLinks(textViewPlaceNotesDetailView, Linkify.PHONE_NUMBERS | Linkify.WEB_URLS);
这适用于(西班牙语)电话号码和网址。
我很确定这在我第一次尝试时并没有解决问题,但从那以后我已经更新为使用最新的依赖项并且它现在可以工作了。
我不知道哪个库处理这个问题,但我的依赖项现在看起来像这样:
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'org.osmdroid:osmdroid-android:6.1.7'
implementation 'org.osmdroid:osmdroid-shape:6.1.6'
implementation 'com.google.android.gms:play-services-location:18.0.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.navigation:navigation-fragment:2.3.4'
implementation 'androidx.navigation:navigation-ui:2.3.4'
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation files('libs/commons-net-3.3.jar')
implementation 'com.android.support:design'
【讨论】:
以上是关于Android Linkify 电话号码 - 如何指定要链接的号码和不链接的号码的主要内容,如果未能解决你的问题,请参考以下文章
Linkify.addLinks(textView、Linkify.WEB_URLS 或 Linkify.EMAIL_ADDRESSES)不能在 Android 中一起使用
java 添加指向TextView的链接。 Linkify。字体:https://stackoverflow.com/questions/4746293/android-linkify-textvie