【问题标题】:Android Linkify - Clickable telephone numbersAndroid Linkify - 可点击的电话号码
【发布时间】:2015-01-13 17:26:07
【问题描述】:

所以我正在尝试添加功能,当您单击电话号码时,它会将您带到带有预填充号码的拨号器应用程序。我有以下代码:

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

文本当前为“T. 0123 4567890”

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

mContactDetailsText.setAutoLinkMask(0);

任何人有任何想法或可以看到我做错了什么?

谢谢

【问题讨论】:

    标签: java android linkify


    【解决方案1】:

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

    mContactDetailsText.setAutoLinkMask(Linkify.PHONE_NUMBERS);
    

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

    mContactDetailsText.setLinksClickable(true);
    

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

    mContactDetailsText.setMovementMethod(LinkMovementMethod.getInstance())
    

    【讨论】:

    • 在 Android 5+ 上,即使模式匹配并在棒棒糖前正确突出显示电话号码,这也不起作用。你知道为什么吗?
    • 答案中的代码在 Lollipop 和 Kit Kat 上都适用于我。没有您的代码,很难知道发生了什么。
    【解决方案2】:

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

     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());
    

    【讨论】:

      【解决方案3】:

      您需要在 TextViews 上设置 onClickListener()。然后他们会响应点击。

      【讨论】:

      • 啊当然。耶稣我累了。但是,我认为在 Android 中,您可以突出显示它和/或用蓝色下划线显示您可以点击它?
      • 我相信 Linkify 应该在 TextView 可点击时自动为其添加下划线。尝试在布局 xml 文件中设置 android:clickable="true"。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 2014-02-24
      相关资源
      最近更新 更多