2013-01-15 35 views
1

我在同一個TextView中都有電話號碼和地址(包括郵編)。我希望電話號碼可點擊撥打電話;然而,這使得郵政編碼也可以點擊撥打電話。如何在不創建其他TextView的情況下使其不再可點擊?謝謝!調用郵編 - Android

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); 
+0

請注意,您的頂部有多餘的報價。我刪除了它,但請檢查它是否不在您的實際代碼中。 –

+0

糟糕。沒有在我的代碼中。感謝壽。我只是改變它真正的快速,使它假街和 – Evorlor

回答

1

android會將count> = 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的機器人的源代碼,在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

2取代「PHONE_NUMBER_MINIMUM_DIGITS」)一個更復雜的解決方案是,如果你的手機號碼是在例如一個更具體的格式,一定要像「(XXX)XXX-XXXX 「,您可以使用自己的模式來替換Patterns.PHONE,以更準確地提取和應用電話號碼鏈接。

+0

哎呀。它工作cuz我只在我的示例代碼中放4位數的郵政編碼。它實際上是一個5位數的代碼。我的錯誤...我已經調整它 – Evorlor

+0

只是根據您的更新進行編輯 – lucian