【问题标题】:Phone number formatting in edittext in androidandroid中edittext中的电话号码格式
【发布时间】:2012-12-17 15:46:00
【问题描述】:

在android的edittext中输入电话号码时,如何设置格式为(xxx)xxx-xxxxx的电话号码?

我想要 (,),- 字符会自动添加到特定位置。

我写了代码,但它只适用于andorid 2.2版本,不适用于以上版本。 我在stackoverflow中搜索了更多问题。我无法得到它。

请检查我的代码:

phone.addTextChangedListener(new TextWatcher () {

            @Override
            public void afterTextChanged(Editable chars) {
                // TODO Auto-generated method stub
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTextChanged(final CharSequence s, final int start, int lengthBefore,
                    int lengthAfter) {
                // TODO Auto-generated method stub
                count = start;

                /*if (phone.getText().length() <= 0) {
                    phone.append("(");
                    phone.setSelection(1);
                }else if (count == 3) {
                    phone.append(")");
                }else if (count == 7) {
                    phone.append("-");
                }

            */

            }
        });



phone.setOnKeyListener(new OnKeyListener (){

                @Override
                public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
                    // TODO Auto-generated method stub
                    if(arg1 == KeyEvent.KEYCODE_DEL){
                        if(count > 0){
                            count = count - 1;
                        }
                    }else{
                        if(phone.getText().length() <= 0){
                            phone.append("(");
                        }else{
                            if(count  == 3){
                                phone.append(")");
                            }else if(count == 7){
                                phone.append("-");
                            }
                        }
                    }
                    return false;
                }

            });


        }

Logcat 显示为:

01-03 15:07:23.529: W/InputManagerService(153): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40900f88
01-03 15:07:23.529: D/StatusBarPolicy(221): mFullChargeListener
01-03 15:07:25.749: V/AudioPolicyManager(84): startOutput() output 1, stream 1, session 1488
01-03 15:07:25.749: V/AudioPolicyManager(84): changeRefCount() stream 1, count 1
01-03 15:07:25.749: V/AudioPolicyManager(84): getDeviceForStrategy() from cache strategy 0, device 2
01-03 15:07:25.749: V/AudioPolicyManager(84): getNewDevice() selected device 2
01-03 15:07:25.749: V/AudioPolicyManager(84): setOutputDevice() output 1 device 2 delayMs 0
01-03 15:07:25.749: V/AudioPolicyManager(84): setOutputDevice() setting same device 2 or null device for output 1
01-03 15:07:25.749: V/AudioPolicyManager(84): releaseOutput() 1
01-03 15:07:25.769: V/AudioHardwareMSM72XX(84): open driver
01-03 15:07:25.769: V/AudioHardwareMSM72XX(84): get config
01-03 15:07:25.769: V/AudioHardwareMSM72XX(84): set config
01-03 15:07:25.769: V/AudioHardwareMSM72XX(84): buffer_size: 4800
01-03 15:07:25.769: V/AudioHardwareMSM72XX(84): buffer_count: 2
01-03 15:07:25.769: V/AudioHardwareMSM72XX(84): channel_count: 2
01-03 15:07:25.769: V/AudioHardwareMSM72XX(84): sample_rate: 44100
01-03 15:07:25.939: W/AudioFlinger(84): write blocked for 164 msecs, 61 delayed writes, thread 0xcdd0
01-03 15:07:26.009: V/AudioPolicyManager(84): stopOutput() output 1, stream 1, session 1488
01-03 15:07:26.009: V/AudioPolicyManager(84): changeRefCount() stream 1, count 0
01-03 15:07:26.009: V/AudioPolicyManager(84): getNewDevice() selected device 0
01-03 15:07:26.009: V/AudioPolicyManager(84): setOutputDevice() output 1 device 0 delayMs 0
01-03 15:07:26.009: V/AudioPolicyManager(84): setOutputDevice() setting same device 0 or null device for output 1
01-03 15:07:26.699: V/AudioPolicyManager(84): startOutput() output 1, stream 1, session 1489
01-03 15:07:26.699: V/AudioPolicyManager(84): changeRefCount() stream 1, count 1
01-03 15:07:26.699: V/AudioPolicyManager(84): getDeviceForStrategy() from cache strategy 0, device 2
01-03 15:07:26.699: V/AudioPolicyManager(84): getNewDevice() selected device 2
01-03 15:07:26.699: V/AudioPolicyManager(84): setOutputDevice() output 1 device 2 delayMs 0
01-03 15:07:26.699: V/AudioPolicyManager(84): setOutputDevice() setting same device 2 or null device for output 1
01-03 15:07:26.699: V/AudioPolicyManager(84): releaseOutput() 1
01-03 15:07:26.859: V/AudioPolicyManager(84): stopOutput() output 1, stream 1, session 1489
01-03 15:07:26.859: V/AudioPolicyManager(84): changeRefCount() stream 1, count 0
01-03 15:07:26.859: V/AudioPolicyManager(84): getNewDevice() selected device 0
01-03 15:07:26.859: V/AudioPolicyManager(84): setOutputDevice() output 1 device 0 delayMs 0
01-03 15:07:26.859: V/AudioPolicyManager(84): setOutputDevice() setting same device 0 or null device for output 1
01-03 15:07:27.499: I/StatusBarPolicy(221): BAT. status:5 health:2

【问题讨论】:

  • 在你的 xml 中试试这个。
  • 你在等这个吗??
  • onkeylistener 无法正常工作
  • 好的,我明白了。它不适用于三星 MetroPCS。保持所有设备正常工作

标签: android


【解决方案1】:

如果有帮助,请尝试使用此库:

http://code.google.com/p/libphonenumber/

或者试试这个:

    String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber);

这将根据号码所在国家/地区的规则自动格式化号码。

您还可以使用以下方法就地格式化可编辑文本:

    PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType);

请查看 PhoneNumberUtils 了解更多选项。

【讨论】:

    【解决方案2】:

    在你的 xml 中试试这个。

      <EditText android:id="@+id/editText1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:ems="10"
       android:inputType="phone" >
        <requestFocus />
     </EditText>
    

    【讨论】:

      【解决方案3】:

      我认为 android API 已经可以做到这一点 签出PhoneNumberUtils 专门用于美国/美国格式化FormatNanpNumber(String) 方法。

      【讨论】:

        【解决方案4】:

        您可以注册一个将格式化电话号码的文本更改侦听器。 android.telephony package 中有一个内置的。

        它很容易使用:

            phoneNumberEditText.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
        

        【讨论】:

          猜你喜欢
          • 2013-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-04
          • 2011-09-02
          • 2013-01-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多