如何修改号码显示格式?比如将number修改为4-4-3分段格式

[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!】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值