我有几个包含电话号码的TextViews活动。我需要的是当用户点击一个时,电话拨打该号码。而通过“拨号”,我的意思是拨号,而不是用预先加载的号码拨打拨号器,等待用户点击“拨号”。
换句话说,我想要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);
}
在阅读了更多关于自动链接应该如何工作的信息之后,这显然是比必要时更多的工作,但它确实有用......
直到我不得不用包含字母的电话号码做同样的事情。你知道那种:1-800-BUY-MY-STUFF。
问题是,Linkify.PHONE_NUMBERS无法识别包含字母作为电话号码的字符串,因此我的字符串不会呈现为链接。然而,onClick仍会存档,我仍然会得到我想要的行为。
所以,我开始深入研究autoLink实际做了什么,并在Linkify上阅读了一些内容,并删除了我的onCLick并尝试使用自定义模式:
Pattern matchEverything = Pattern.compile("^.*$");
TextView textPhoneNumber = (TextView)findViewById(R.id.textPhoneNumber);
Linkify.addLinks(textPhoneNumbermatchEverything, "tel:");
由于我的TextView只包含一个电话号码,我想我会保持正则表达式简单。这很好。
除了我认为我得到Intent.ACTION_DIAL而不是Intent.ACTION_CALL。
将电话号码显示在活动中作为可点击链接的最简单方法是什么,点击该链接拨打电话,而不是只是拨打拨号器?
答案 0 :(得分:1)
您可以通过模拟相同的行为来跳过整个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
方法。