Android使电话号码可点击,自动检测

当我在网站上使用android和阅读电子邮件时,我注意到我可以点击地址来加载到Google地图,或者点击电话号码来打电话,或者点击电子邮件并发送电子邮件。

networking上的这些元素是以各种方式格式化的,所以有一些内置的函数可以检测这些东西。

我如何在我的应用程序中允许这个? 我有一个以纯文本显示联系信息的页面,我希望用户能够点击。

我绝对需要为每个文本视图创buildclicklisteners还是有一个系统function,我只需要启用?

Solutions Collecting From Web of "Android使电话号码可点击,自动检测"

检查Linkify

使用

android:autoLink="phone" 

在XML布局文件中的textView

 import android.text.util.Linkify; Linkify.addLinks(text, Linkify.PHONE_NUMBERS); 

您可以为每种要进行点击的数据制作正则expression式。 我不清楚你国家的电话号码是怎么样的。 这是为了匹配我的国家的电话号码。 例如:

 String PHONE_REGEX = "([0-9]{3}[\\./ ]?(([0-9]{2}[\\./ ]?[0-9]{2}[\\./ ]?[0-9]{2})|({[0-9]{3}[\\./ ]?[0-9]{3})))" String yourHTML = "This is my phone number: 053 12 34 56." // Underline and make Bold yourHTML = yourHTML.replaceAll(PHONE_REGEX, "<b><u>$1</u></b>"); 

如果你想检测不同的模式,如电子邮件,联系电话,网页链接,并设置单独的点击实现这些模式,我build议你使用CustomClickableEmailPhoneTextview

在这里输入图像说明

示例代码来使用库。

 CustomPartialyClickableTextview customPartialyClickableTextview= (CustomPartialyClickableTextview) findViewById(R.id.textViewCustom); /** * Create Objects For Click Patterns */ ClickPattern email=new ClickPattern(); ClickPattern phone=new ClickPattern(); ClickPattern weblink=new ClickPattern(); /** * set Functionality for what will happen on click of that pattern * In this example pattern is email */ email.setOnClickListener(new ClickPattern.OnClickListener() { @Override public void onClick() { Toast.makeText(MainActivity.this,"email clicked",Toast.LENGTH_LONG).show(); } }); /** * set Functionality for what will happen on click of that pattern * In this example pattern is phone */ phone.setOnClickListener(new ClickPattern.OnClickListener() { @Override public void onClick() { Toast.makeText(MainActivity.this,"phone clicked",Toast.LENGTH_LONG).show(); } }); /** * set Functionality for what will happen on click of that pattern * In this example pattern is weblink */ weblink.setOnClickListener(new ClickPattern.OnClickListener() { @Override public void onClick() { Toast.makeText(MainActivity.this,"website clicked",Toast.LENGTH_LONG).show(); } }); /** * set respective regex string to be used to identify patter */ email.setRegex("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[AZ]{2,4}\\b"); // regex for email phone.setRegex("[1-9][0-9]{9,14}"); // regex for phone number weblink.setRegex("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); // regex for weblink /** * add click pattern to the custom textview - first parameter is tag for reference second parameter is ClickPattern object */ customPartialyClickableTextview.addClickPattern("email",email); customPartialyClickableTextview.addClickPattern("phone",phone); customPartialyClickableTextview.addClickPattern("weblink",weblink); 
 android:autoLink="phone" 

在所有的手机上为我工作, 除了三星 。 因此,我select了以下选项。 转换的电话号码文本,以支持点击呼叫 :

 <a href="tel:+4930123456789">+49 / 30 123456789</a> 

然后使用这个静态帮助器方法来添加网页链接支持到我的TextViews

 public static void linkifyTextViews(@NonNull TextView... textViews) { for (TextView textView : textViews) { Linkify.addLinks(textView, Linkify.WEB_URLS); textView.setMovementMethod(LinkMovementMethod.getInstance()); } } 

你可以像这样在TextView中使用它,

如下设置android:autoLink =“phone”

 <TextView android:layout_width="fill_parent" android:id="@+id/text" android:layout_height="wrap_content" android:autoLink="phone" android:gravity="center" android:linksClickable="true" android:text="@string/txtCredits" /> 

然而,

由于某些原因,以上代码不能一直工作。 所以,还要添加下面的代码,

 TextView textView = (TextView) findViewById(R.id.text); textView.setMovementMethod(LinkMovementMethod.getInstance());