在我的应用中,用户必须使用以下格式在EditText字段中输入电话号码:



我不希望用户在输入数字时键入“(”,“)”或“-”;我希望这些字符自动添加。

例如,假设用户键入了1 -应该自动添加“1”之后的括号,以便显示“1(”。我希望在删除时具有类似的功能。

我试图在afterTextChanged接口(interface)的onTextWatcher方法中设置文本,但是它不起作用;相反,它会导致错误。任何帮助将不胜感激。

最佳答案

您可能会遇到问题,因为afterTextChanged是可重入的,即,对文本所做的更改导致再次调用该方法。

如果那是问题,一种解决方法是保留实例变量标志:

public class MyTextWatcher implements TextWatcher {
    private boolean isInAfterTextChanged;

    public synchronized void afterTextChanged(Editable text) {
       if (!isInAfterTextChanged) {
           isInAfterTextChanged = true;

           // TODO format code goes here

           isInAfterTextChanged = false;
       }
    }
}

作为替代方案,您可以只使用PhoneNumberFormattingTextWatcher -它不执行您描述的格式,但是再次使用时不必做太多事情。

10-07 14:19