[DESCRIPTION]
示例如何将现有号码显示格式,修改为某一种固定格式(比如4-4-3)。
比如:
国内号码是 3-4-4 格式,如 150 XXXX XXXX,
怎么修改为 4-4-3 格式,如 150X XXXX XXX。
[SOLUTION]
[修改方法]
Step1.
Phonemetadata.java 第54行左右的 getPattern() 强制返回 "(\\d{4})(\\d{4})(\\d{3})"
// public String getPattern() { return pattern_; }
public String getPattern() { return "(\\d{4})(\\d{4})(\\d{3})"; }
Step2.
Phonemetadata.java 第66行左右的 getFormat() 强制返回 "$1 $2 $3"
// public String getFormat() { return format_; }
public String getFormat() { return "$1 $2 $3"; }
--------------------------------------------------------------------------------------------------------------
[附加修改1]
将号码中的空格替换为短线,‘ ’替换成‘-’
可以通过replaceall(" ", "-"); 方法来实现,
详细如下:
PhoneNumberFormattingTextWatcher.java 的
afterTextChanged() 方法中如下位置
String formatted = reformat(s, Selection.getSelectionEnd(s));
if (formatted != null) {
// Add for change blank to ‘-’
formatted = formatted.replaceAll(" ", "-");
// End
[附加修改2]
如需将号码最前面的0也计算在格式化号码范围内的话 需要加上以下修改。
Number : 021XXXXXXXX
修改前格式: 021XX XXXX XX
加上以下修改后格式: 021X XXXX XXX
註解掉AsYouTypeFormatter.java部分Code
private String removeNationalPrefixFromNationalNumber() {
int startOfNationalNumber = 0;
// Start modified ---------------------------------------------------------------------------------------
// if (currentMetaData.getCountryCode() == 1 && nationalNumber.charAt(0) == '1') {
// startOfNationalNumber = 1;
// prefixBeforeNationalNumber.append("1 ");
// isInternationalFormatting = true;
// } else if (currentMetaData.hasNationalPrefixForParsing()) {
// Pattern nationalPrefixForParsing =
// regexCache.getPatternForRegex(currentMetaData.getNationalPrefixForParsing());
// Matcher m = nationalPrefixForParsing.matcher(nationalNumber);
// if (m.lookingAt()) {
// // When the national prefix is detected, we use international formatting rules instead of
// // national ones, because national formatting rules could contain local formatting rules
// // for numbers entered without area code.
// isInternationalFormatting = true;
// startOfNationalNumber = m.end();
// prefixBeforeNationalNumber.append(nationalNumber.substring(0, startOfNationalNumber));
// }
// }
// End ---------------------------------------------------------------------------------------
String nationalPrefix = nationalNumber.substring(0, startOfNationalNumber);
nationalNumber.delete(0, startOfNationalNumber);
return nationalPrefix;
}
【修改的文件的对应路径】
Phonemetadata.java
路径:external\libphonenumber\java\src\com\android\i18n\Phonenumbers
PhoneNumberFormattingTextWatcher.java
路径:frameworks\base\telephony\java\android\Telephony
AsYouTypeFormatter.java
路径:external\libphonenumber\java\src\com\android\i18n\Phonenumbers
【End!】
示例如何将现有号码显示格式,修改为某一种固定格式(比如4-4-3)。
比如:
国内号码是 3-4-4 格式,如 150 XXXX XXXX,
怎么修改为 4-4-3 格式,如 150X XXXX XXX。
[SOLUTION]
[修改方法]
Step1.
Phonemetadata.java 第54行左右的 getPattern() 强制返回 "(\\d{4})(\\d{4})(\\d{3})"
// public String getPattern() { return pattern_; }
public String getPattern() { return "(\\d{4})(\\d{4})(\\d{3})"; }
Step2.
Phonemetadata.java 第66行左右的 getFormat() 强制返回 "$1 $2 $3"
// public String getFormat() { return format_; }
public String getFormat() { return "$1 $2 $3"; }
--------------------------------------------------------------------------------------------------------------
[附加修改1]
将号码中的空格替换为短线,‘ ’替换成‘-’
可以通过replaceall(" ", "-"); 方法来实现,
详细如下:
PhoneNumberFormattingTextWatcher.java 的
afterTextChanged() 方法中如下位置
String formatted = reformat(s, Selection.getSelectionEnd(s));
if (formatted != null) {
// Add for change blank to ‘-’
formatted = formatted.replaceAll(" ", "-");
// End
[附加修改2]
如需将号码最前面的0也计算在格式化号码范围内的话 需要加上以下修改。
Number : 021XXXXXXXX
修改前格式: 021XX XXXX XX
加上以下修改后格式: 021X XXXX XXX
註解掉AsYouTypeFormatter.java部分Code
private String removeNationalPrefixFromNationalNumber() {
int startOfNationalNumber = 0;
// Start modified ---------------------------------------------------------------------------------------
// if (currentMetaData.getCountryCode() == 1 && nationalNumber.charAt(0) == '1') {
// startOfNationalNumber = 1;
// prefixBeforeNationalNumber.append("1 ");
// isInternationalFormatting = true;
// } else if (currentMetaData.hasNationalPrefixForParsing()) {
// Pattern nationalPrefixForParsing =
// regexCache.getPatternForRegex(currentMetaData.getNationalPrefixForParsing());
// Matcher m = nationalPrefixForParsing.matcher(nationalNumber);
// if (m.lookingAt()) {
// // When the national prefix is detected, we use international formatting rules instead of
// // national ones, because national formatting rules could contain local formatting rules
// // for numbers entered without area code.
// isInternationalFormatting = true;
// startOfNationalNumber = m.end();
// prefixBeforeNationalNumber.append(nationalNumber.substring(0, startOfNationalNumber));
// }
// }
// End ---------------------------------------------------------------------------------------
String nationalPrefix = nationalNumber.substring(0, startOfNationalNumber);
nationalNumber.delete(0, startOfNationalNumber);
return nationalPrefix;
}
【修改的文件的对应路径】
Phonemetadata.java
路径:external\libphonenumber\java\src\com\android\i18n\Phonenumbers
PhoneNumberFormattingTextWatcher.java
路径:frameworks\base\telephony\java\android\Telephony
AsYouTypeFormatter.java
路径:external\libphonenumber\java\src\com\android\i18n\Phonenumbers
【End!】