2017-02-21 72 views
0

我想设置PhoneNumberFormattingTextWatcher的语言环境。如何在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(应用程序)

+0

看起来像使用'String'的隐藏构造函数更容易:https://android.googlesource.com/platform/frameworks/base.git/+/kitkat-release/telephony/java/ android/telephony/PhoneNumberFormattingTextWatcher.java#71不知道为什么它被隐藏了。 –

+0

访问隐藏的构造函数..这是一个好主意。我会尽力! –

回答

0

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

1

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设置的地点。

+0

我想在其他情况下使用PhoneNumberFormattingTextWatcher(“US”)(在棒棒糖下)。 我已经使用过(Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP)这种情况。 –

+1

好..它不适用于较低版本..但你可以使用不同的库。 –

相关问题