【问题标题】:Phone number formatting in AndroidAndroid中的电话号码格式
【发布时间】:2015-07-23 08:16:44
【问题描述】:

在我的应用中,用户输入他的电话号码。 例如,如果他输入: 123456 我想让他看到: 12 34 56 我该怎么做?

【问题讨论】:

    标签: android android-layout android-activity


    【解决方案1】:

    根据语言环境试试它的工作方式:

    etNumber.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
    

    您也可以使用国家代码。 https://developer.android.com/reference/android/telephony/PhoneNumberFormattingTextWatcher.html

    【讨论】:

      【解决方案2】:

      您可以将文本观察器添加到您的编辑文本中并检查文本的大小直到 2 位并在其中添加空格,如下所示

      callphoneEditText.addTextChangedListener(new CustomTextWatcherForPhoneNumber());
      

      下面的类做了你需要的事情

        public static class CustomTextWatcherForPhoneNumber implements TextWatcher {
      
              // Change this to what you want... ' ', '-' etc..
              private static final char space = ' ';
      
              @Override
              public void onTextChanged(CharSequence s, int start, int before,
                      int count) {
              }
      
              @Override
              public void beforeTextChanged(CharSequence s, int start, int count,
                      int after) {
              }
      
              @Override
              public void afterTextChanged(Editable s) {
                  // Remove spacing char
                  if (s.length() > 0 && (s.length() % 5) == 0) {
                      final char c = s.charAt(s.length() - 1);
                      if (space == c) {
                          s.delete(s.length() - 1, s.length());
                      }
                  }
                  // Insert char where needed.
                  if (s.length() > 0 && (s.length() % 5) == 0) {
                      char c = s.charAt(s.length() - 1);
                      // Only if its a digit where there should be a space we insert a
                      // space
                      if (Character.isDigit(c)
                              && TextUtils.split(s.toString(), String.valueOf(space)).length <= 2) { ****// At this point you will check values and add space between them****
                          s.insert(s.length() - 1, String.valueOf(space));
                      }
                  }
              }
          }
      

      检查一下,如果对你有帮助,请告诉我

      【讨论】:

        【解决方案3】:

        您应该查看android.telephony API 中的PhoneNumberUtilshttps://developer.android.com/reference/android/telephony/PhoneNumberUtils.html

        编辑:

        在那里你可以找到方法formatNumber,你可以使用它来显示电话号码。

        此方法尝试根据其所在国家/地区的规则来格式化数字。如果这不可能,则返回原始数字。

        public static String formatNumber (String phoneNumber)
        

        此方法尝试根据给定国家/地区的默认约定格式化数字(国家/地区参数设置为两个字母的国家/地区代码,例如 USGBDE。有关详细信息,请参阅此处:@987654322 @)。如果数字无效,则方法返回null

        public static String formatNumber (String phoneNumber, String defaultCountryIso)
        

        【讨论】:

        • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
        • 好的,我编辑了我的答案。我希望现在它已经足够完整了。
        【解决方案4】:

        您可以从 google 代码中查看 libphonenumber 库。 https://github.com/googlei18n/libphonenumber

        我用它为 android 做了一个小应用程序,它运行得很好。

        在法国通常使用 XX XX XX XX 数字格式。所以你可以做类似的事情

        String formattedNumber = phoneUtil.parse(numberProto, "FR");
        

        它们还具有“键入时格式化”功能,这可能也是您感兴趣的。请查看他们的示例。

        //Formatting Phone Numbers 'as you type'
        
        PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
        AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("US");
        System.out.println(formatter.inputDigit('6'));  // Outputs "6"
        ...  // Input more digits
        System.out.println(formatter.inputDigit('3'));  // Now outputs "650 253"
        

        编辑

        您可以使用下面的链接https://rawgit.com/googlei18n/libphonenumber/master/javascript/i18n/phonenumbers/demo-compiled.html 来尝试代码返回的内容。 (有趣的是“asYouTypeFormatter”的输出

        【讨论】:

        猜你喜欢
        • 2016-05-04
        • 2013-03-07
        • 2012-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-25
        • 2016-12-24
        • 2011-12-07
        相关资源
        最近更新 更多