如何在kitkat中设置PhoneNumberFormattingTextWatcher的语言环境?

时间:2017-02-21 03:53:19

标签: android android-4.4-kitkat

我想设置PhoneNumberFormattingTextWatcher的语言环境。

但是在kitkat中,不能使用PhoneNumberFormattingTextWatcher(String countryCode)构造函数。

所以我尝试使用反射。像这样。

phoneNumberFormattingTextWatcher = new phoneNumberFormattingTextWatcher();

Field mFormatter = PhoneNumberFormattingTextWatcher.class.getDeclaredField("mFormatter");
mFormatter.setAccessible(true);

mFormatter.set(phoneNumberFormattingTextWatcher, 
PhoneNumberUtil.getInstance().getAsYouTypeFormatter(COUNTRY_ISO));

但是mFormatter.set()方法抛出IllegalArgumentException。

我该如何解决?

编译'com.googlecode.libphonenumber:libphonenumber:7.2.2'

build.gradle(application)

2 个答案:

答案 0 :(得分:2)

mPhoneText.addTextChangedListener(new PhoneNumberFormattingTextWatcher());

这不适用于21或更高版本的api。所以你应该像这样包裹在api lvl条件中。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mPhoneText.addTextChangedListener(new PhoneNumberFormattingTextWatcher("US"));
        }else {
            mPhoneText.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
        }

并且不要忘记设置inputType="phone"

这就是为高级API设置区域设置的方法。

答案 1 :(得分:0)

PhoneNumberFormattingTextWatcher的mFormatter是 com.android.i18n.phonenumbers.AsYouTypeFormatter类但我注入了com.google.i18n.phonenumbers.AsYouTypeFormatter类的实例。 T T