Форматирование номера телефона 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());
}
}
}
1 ответ
Вы должны быть осторожны с вызовом метода setText внутри TextWatcher. В противном случае вы создаете бесконечный цикл, потому что вы всегда меняете текст.
Вы можете попробовать следующее только установить текст, если это действительно необходимо:
if(!telephone.getText().toString().equals(formatted)) {
telephone.setText(formatted);
}
Вместо просто:
telephone.setText(formatted);
Таким образом, вы сможете избежать создания бесконечного цикла