我正在使用此代码在第3和第4个号码后的电话号码中添加短划线(' - ')。代码工作得很好。我的问题是,当我按退格键时,我无法删除短划线。我甚至可以添加点,如果我按退格键,我可以删除它们,但是使用短划线,这是不可能的。
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
MainActivity.headerName.setText("Verification");
phoneNumber = (EditText) getActivity().findViewById(R.id.phoneEditText);
int grup = 1;
phoneNumber.addTextChangedListener(new TextWatcher() {
int keyDel;
String a= phoneNumber.getText().toString();
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
phoneNumber.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KEYCODE_DEL) {
a = a.replace("-" , "");
phoneNumber.setText(a);
keyDel = 1;
}
return false;
}
});
if (keyDel == 0) {
int len = phoneNumber.getText().length();
if(len == 3 || len == 7) {
phoneNumber.setText(phoneNumber.getText() + "-");
phoneNumber.setSelection(phoneNumber.getText().length());
}
} else {
if(KeyEvent.isModifierKey(KEYCODE_DEL)) {
a = a.replace("-" , "");
phoneNumber.getText().toString().replace("-" , "");
phoneNumber.setText(a);
}
keyDel = 0;
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
答案 0 :(得分:0)
我猜你的UI小部件正在格式化它的文本。因此,在删除连字符后,窗口小部件会将其放回。
我建议你单独留下小部件。相反,当您需要使用电话号码时,请从值中删除格式化字符。
String.replaceAll("[^\\d]", "")
从窗口小部件中检索值以供某些外部使用时,您将使用此代码。所以,你可能有一个方法
public String getPhoneNumberUnformatted() {...}
只返回小部件值的数字。