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());
        }
    }
}
最佳答案
在TextWatcher中调用setText方法时需要注意.否则,您将创建一个无限循环,因为您始终在更改文本.

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

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

而不仅仅是:

telephone.setText(formatted);

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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...