ACTION_CALL 意图,与 Linkify?
ACTION_CALL intent, with Linkify?
我有几个带有包含 phone 数字的 TextView 的活动。我需要的是,当用户点击一个时,phone 会拨打该号码。 "dial",我的意思是拨号,而不是调出预加载号码的拨号器,等待用户单击 "Dial"。
换句话说,我想要Intent.ACTION_CALL,而不是Intent.ACTION_DIAL。
请记住,我是 Android 开发的新手,我才刚刚开始弄清楚如何将它们组合在一起。
我的第一次尝试很简单。在我的 XML:
<TextView
android:id="@+id/textPhoneNumber"
android:text="@string/the_phone_number"
android:autoLink="phone"
android:clickable="true"
android:onClick="clickPhone"
/>
然后在我的 java:
public void clickPhone(View view)
{
String phoneNumber = getString(R.string.the_phone_number);
Uri uri = Uri.parse("tel:" + phoneNumber);
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(uri);
startActivity(callIntent);
}
阅读了更多有关 autolink 应该如何工作的内容后,这显然比应有的工作要多,但它确实有效...
直到我不得不对包含字母的 phone 数字做同样的事情。你知道那种:1-800-BUY-MY-STUFF.
问题是,Linkify.PHONE_NUMBERS 无法将包含字母的字符串识别为 phone 数字,因此我的字符串不会呈现为 link。不过,onClick 仍会归档,而且我仍会得到我想要的行为。
因此,我深入研究了 autoLink 实际做了什么,并阅读了一些关于 Linkify 的内容,并删除了我的 onCLick 并尝试使用自定义模式:
Pattern matchEverything = Pattern.compile("^.*$");
TextView textPhoneNumber = (TextView)findViewById(R.id.textPhoneNumber);
Linkify.addLinks(textPhoneNumbermatchEverything, "tel:");
因为我的 TextView 只包含一个 phone 数字,我想我应该让 Regex 保持简单。这很好用。
除了我认为我得到的是 Intent.ACTION_DIAL 而不是 Intent.ACTION_CALL。
让 phone 号码显示在 Activity 中作为可点击的 link,并点击 link 拨打 [=51] 的最简单方法是什么=],而不只是调出拨号器?
您可以通过模拟相同的行为来跳过整个 linkify 业务:
使用SpannableString给TextView中的文本加下划线:
String udata="1-800-BUY-MY-STUFF";
SpannableString content = new SpannableString(udata);
content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);
mTextView.setText(content);
然后在XML中,将TextView的文本颜色设置为#05c5cf
之后就是调用你的 clickPhone
方法了。
我有几个带有包含 phone 数字的 TextView 的活动。我需要的是,当用户点击一个时,phone 会拨打该号码。 "dial",我的意思是拨号,而不是调出预加载号码的拨号器,等待用户单击 "Dial"。
换句话说,我想要Intent.ACTION_CALL,而不是Intent.ACTION_DIAL。
请记住,我是 Android 开发的新手,我才刚刚开始弄清楚如何将它们组合在一起。
我的第一次尝试很简单。在我的 XML:
<TextView
android:id="@+id/textPhoneNumber"
android:text="@string/the_phone_number"
android:autoLink="phone"
android:clickable="true"
android:onClick="clickPhone"
/>
然后在我的 java:
public void clickPhone(View view)
{
String phoneNumber = getString(R.string.the_phone_number);
Uri uri = Uri.parse("tel:" + phoneNumber);
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(uri);
startActivity(callIntent);
}
阅读了更多有关 autolink 应该如何工作的内容后,这显然比应有的工作要多,但它确实有效...
直到我不得不对包含字母的 phone 数字做同样的事情。你知道那种:1-800-BUY-MY-STUFF.
问题是,Linkify.PHONE_NUMBERS 无法将包含字母的字符串识别为 phone 数字,因此我的字符串不会呈现为 link。不过,onClick 仍会归档,而且我仍会得到我想要的行为。
因此,我深入研究了 autoLink 实际做了什么,并阅读了一些关于 Linkify 的内容,并删除了我的 onCLick 并尝试使用自定义模式:
Pattern matchEverything = Pattern.compile("^.*$");
TextView textPhoneNumber = (TextView)findViewById(R.id.textPhoneNumber);
Linkify.addLinks(textPhoneNumbermatchEverything, "tel:");
因为我的 TextView 只包含一个 phone 数字,我想我应该让 Regex 保持简单。这很好用。
除了我认为我得到的是 Intent.ACTION_DIAL 而不是 Intent.ACTION_CALL。
让 phone 号码显示在 Activity 中作为可点击的 link,并点击 link 拨打 [=51] 的最简单方法是什么=],而不只是调出拨号器?
您可以通过模拟相同的行为来跳过整个 linkify 业务:
使用SpannableString给TextView中的文本加下划线:
String udata="1-800-BUY-MY-STUFF";
SpannableString content = new SpannableString(udata);
content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);
mTextView.setText(content);
然后在XML中,将TextView的文本颜色设置为#05c5cf
之后就是调用你的 clickPhone
方法了。