我想让用户在editText中输入的电话号码,以动态改变格式,每次用户输入一个数字。也就是说,当用户输入最多4位数字时,如7144,editText将显示"714-4“。每当用户输入数字时,我希望editText动态更新为格式#-#-#。如何做到这一点?此外,我还在处理多个editTexts。
发布于 2011-01-13 05:10:50
最简单的方法是使用内置的Android PhoneNumberFormattingTextWatcher。
所以基本上你在代码中获得你的EditText,并像这样设置你的文本监视器…
EditText inputField = (EditText) findViewById(R.id.inputfield);
inputField.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
使用PhoneNumberFormattingTextWatcher的好处是它将根据您的区域设置正确地格式化您的数字条目。
发布于 2016-08-26 01:49:27
只需将以下代码添加到Phone Number的EditText中,即可获得格式化的电话号码(#-#-#)
Phone.addTextChangedListener(new TextWatcher() {
int length_before = 0;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
length_before = s.length();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (length_before < s.length()) {
if (s.length() == 3 || s.length() == 7)
s.append("-");
if (s.length() > 3) {
if (Character.isDigit(s.charAt(3)))
s.insert(3, "-");
}
if (s.length() > 7) {
if (Character.isDigit(s.charAt(7)))
s.insert(7, "-");
}
}
}
});
发布于 2018-08-18 03:34:22
上面的解决方案没有考虑退格符,所以当你在键入后删除一些数字时,格式往往会变得混乱。下面的代码更正了这个问题。
phoneNumberEditText.addTextChangedListener(new TextWatcher() {
int beforeLength;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
beforeLength = phoneNumberEditText.length();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int digits = phoneNumberEditText.getText().toString().length();
if (beforeLength < digits && (digits == 3 || digits == 7)) {
phoneNumberEditText.append("-");
}
}
@Override
public void afterTextChanged(Editable s) { }
});
https://stackoverflow.com/questions/4152780
复制相似问题