2013-01-15 3 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 인 숫자를 전화 번호로 간주합니다. 그래서 적어도 2 개의 솔루션이있을 것이라고 생각합니다.

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에서, 상기 방법에 기초한다 : sPhoneNumberMatchFilter가 자리를 필터링 할 때,

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

호출할지 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

oops. 그것은 사촌 난 단지 예제 코드에서 4 자리 우편 번호를 넣어 근무했다. 그것의 실제로 5 자리 코드. 내 실수 ... 나는 그것을 조정했습니다 – Evorlor

+0

방금 ​​귀하의 업데이트에 따라 편집 – lucian