2017-02-21 12 views
0

Я хочу установить локаль PhoneNumberFormattingTextWatcher.Как установить PhoneNumberFormattingTextWatcher's locale в kitkat?

но в 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

mFormatter PhoneNumberFormattingTextWatcher является класс com.android.i18n.phonenumbers.AsYouTypeFormatter но Я ввел com.google.i18n.phonenumbers.As экземпляр класса EXYTypeFormatter. T T

1

mPhoneText.addTextChangedListener (новый 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

хорошо .. его невозможно для более низкой версии .. но вы можете использовать для этого другую библиотеку. –

Смежные вопросы