我在同一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);
答案 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,更准确地提取和应用电话号码链接