调用邮政编码 - Android

时间:2013-01-15 02:21:03

标签: java android eclipse

我在同一TextView中同时拥有电话号码和地址(包括邮政编码)。我希望电话号码可以点击呼叫;但是,这使得邮政编码也可以点击进行打电话。如何在不创建其他TextView的情况下使其不再可点击?谢谢!

tvInfo.setText(Html.fromHtml("John Smith<br>123 Fake Street<br>Faketown, FK 12345<br><b>(804) 932-3300</b><br>"));

Linkify.addLinks(tvInfo, Linkify.PHONE_NUMBERS);

1 个答案:

答案 0 :(得分:1)

android会将带有count&gt; = 5的数字视为电话号码。所以我认为至少会有两种解决方案:

1)一个简单的解决方法:如果您确定电话号码的长度超过5,例如,至少6位数,您可以解决一些问题:

private final static int MY_PHONE_NUMBER_MINIMUM_DIGITS = 6;

Linkify.addLinks(main, Patterns.PHONE, "tel:", new Linkify.MatchFilter() {
     public final boolean acceptMatch(CharSequence s, int start, int end) {
       int digitCount = 0;

       for (int i = start; i < end; i++) {
         if (Character.isDigit(s.charAt(i))) {
           digitCount++;
           if (digitCount >= MY_PHONE_NUMBER_MINIMUM_DIGITS ) {
             return true;
         }
       }
     }
      return false;
    }
  }, Linkify.sPhoneNumberTransformFilter);

这个解决方法是基于Linkify的android源代码,在Linkify中,方法:

gatherLinks(links, text, Patterns.PHONE, 
            new String[] { "tel:" },
            sPhoneNumberMatchFilter, sPhoneNumberTransformFilter); 
将调用

,而sPhoneNumberMatchFilter将过滤小于5的数字:

public static final MatchFilter sPhoneNumberMatchFilter = new MatchFilter() {
    public final boolean acceptMatch(CharSequence s, int start, int end) {
      int digitCount = 0;

      for (int i = start; i < end; i++) {
        if (Character.isDigit(s.charAt(i))) {
          digitCount++;
          if (digitCount >= PHONE_NUMBER_MINIMUM_DIGITS/*=5*/) {
            return true;
        }
      }
    }
    return false;
 }

};

所以我们只用6替换“PHONE_NUMBER_MINIMUM_DIGITS”

2)更复杂的解决方案是,如果您的电话号码是更具体的格式,例如,必须是“(xxx)xxx-xxxx”,您可以使用自己的模式替换Patterns.PHONE,更准确地提取和应用电话号码链接