如何在android的edittext中输入电话号码时设置(xxx)xxx-xxxxx格式的电话号码?
I want(,),-字符自动添加到特定位置
我写的代码,但它只适用于android 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
如果有帮助,请尝试使用这个库:
http://code.google.com/p/libphonenumber/或者试一下:
String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber);
这将根据号码所在国家的规则自动格式化号码。
您还可以使用:
就地格式化可编辑文本 PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType);
请查看PhoneNumberUtils以获取更多选项
您可以注册一个文本更改侦听器,它将格式化电话号码。机器人里有一个内置的。电话包。
很容易使用:
phoneNumberEditText.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
在您的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>
我认为android API已经可以做到这一点了查看PhoneNumberUtils