将EditText电话号码格式化为用户类型

Gui*_*rme 5 formatting android textwatcher android-edittext

EditText每当用户键入一个新角色时,我想编辑一个字段内容.基本上我想使用格式化电话号码libphonenumber.

我实现了一个TextWatcher读取字段内容并将其格式化为电话格式的内容.但每次我EditText使用格式化字符串设置文本时,再次调用观察者,再次设置文本,并且它会陷入此无限循环中.

将文本编辑为用户类型的最佳或正确方法是什么?

@Override
public void afterTextChanged(Editable editable) {
    if (editable.length() > 1) {
        try {
            PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
            PhoneNumber numberProto = phoneUtil.parse(editable.toString(), "BR");
            String formatted = phoneUtil.format(numberProto, PhoneNumberFormat.NATIONAL);
            telephone.setText(formatted);
        } catch (NumberParseException e) {
           Log.d("Telefone", "NumberParseException was thrown: " + e.toString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

don*_*uxx 4

在 TextWatcher 中调用 setText 方法时需要小心。否则,您将创建无限循环,因为您总是在更改文本。

您可以尝试以下操作,仅在确实有必要时设置文本:

if(!telephone.getText().toString().equals(formatted)) {
    telephone.setText(formatted);
}
Run Code Online (Sandbox Code Playgroud)

而不仅仅是:

telephone.setText(formatted);
Run Code Online (Sandbox Code Playgroud)

这样你应该能够避免创建无限循环

  • 尝试这个关于光标定位的答案:http://stackoverflow.com/a/8035171/2399024 (2认同)