Android Linkify - 可点击的电话号码

时间:2015-01-13 17:26:08

标签: java android linkify

所以我试图添加这样的功能,当您点击电话号码时,它会带您到预先填充号码的拨号器应用程序。我有以下代码:

mContactDetailsText.setText(phonetextBuilder.toString());
            Pattern pattern = Pattern.compile("[0-9]+\\s+[0-9]+");
            Linkify.addLinks(mContactDetailsText, pattern, "tel:");

和Text目前是“T. 0123 4567890”

目前的结果是只有上面的字符串,而不是可点击的。我甚至尝试添加以下行,但没有运气:

mContactDetailsText.setAutoLinkMask(0);

任何人都有任何想法或者能看出我做错了什么?

由于

3 个答案:

答案 0 :(得分:9)

自动链接掩码需要包含搜索电话号码:

mContactDetailsText.setAutoLinkMask(Linkify.PHONE_NUMBERS);

然后,您需要将链接设置为可点击:

mContactDetailsText.setLinksClickable(true);

您可能还需要设置移动方法:

mContactDetailsText.setMovementMethod(LinkMovementMethod.getInstance())

答案 1 :(得分:3)

您应该能够通过其他答案完成您想要的任务, 但这肯定会有效,并且可以让您更好地控制文本的显示以及单击数字时会发生什么。

 String text = "T. ";
 StringBuilder stringBuilder = new StringBuilder(text);
 int phoneSpanStart = stringBuilder.length();
 String phoneNumber = "0123 4567890"
 stringBuilder.append(phoneNumber);
 int phoneSpanEnd = stringBuilder.length();

 ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View textView) {
                Intent intent = new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:" + phoneNumber.replace(" ", "")));
                startActivity(intent); 
            }

            public void updateDrawState(TextPaint ds) {// override updateDrawState
                ds.setUnderlineText(false); // set to false to remove underline
                ds.setColor(Color.BLUE);
            }
        };
   SpannableString spannableString = new SpannableString(stringBuilder);
   spannableString.setSpan(clickableSpan, phoneSpanStart, phoneSpanEnd,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

 myTextView.setText(spannableString);
 myTextView.setMovementMethod(LinkMovementMethod.getInstance());

答案 2 :(得分:0)

您需要在TextView上设置onClickListener()。然后他们会回复点击。