2017-02-21 14 views
0

PhoneNumberFormattingTextWatcherのロケールを設定したいとします。kitkatでPhoneNumberFormattingTextWatcherのロケールを設定するにはどうすればよいですか?

しかしキットカットで、PhoneNumberFormattingTextWatcher(文字列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(新PhoneNumberFormattingTextWatcher());

これは、21以上のAPIで動作していません。あなたはこのようなAPIの状態でラップする必要があります。

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

うん..下位バージョンはできませんが、あなたはそれのために別のライブラリを使用することができます。 –

関連する問題