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

每次用户键入新字符时,我EditText编辑EditText字段内容。 基本上我想用libphonenumber格式化电话号码。

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

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

 @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()); } } } 

在TextWatcher中调用setText方法时需要注意。 否则,您将创建一个无限循环,因为您始终在更改文本。

如果真的有必要,您可以尝试以下仅设置文本:

 if(!telephone.getText().toString().equals(formatted)) { telephone.setText(formatted); } 

而不仅仅是:

 telephone.setText(formatted); 

这样你就可以避免创建一个无限循环