Ben TextWatcher ile Google'ın libphonenumber gelen AsYouTypeFormatter kullanmaya çalışıyorum ve eğer mümkünse emin değilim ediyorum. Metni bir EditText alanından biçimlendirilmiş olarak biçimlendirdim ve başka bir EditText'de çıktı ancak orijinal EditText alanını doğrudan değiştiremedim (istediğim şey). PhoneNumberFormattingTextWatcher hakkında bilgi sahibiyim, ancak kullanıcının hangi yerel ayarları içerdiğini seçmemizi ve daha fazla denetime sahip olmanın (topladığımdan) daha fazla denetime sahip olmasını istiyoruz. sınıfınAndroid Uygulamasında AsYouTypeFormatter TextWatcher'ı nasıl kullanırım?
Üst:
private View phoneNumberView;
private EditText phoneNumberText;
private String formattedPhoneNumber;
private boolean isInAfterTextChanged;
private AsYouTypeFormatter aytf;
Önce benim sınıfının en üstünde AsYouTypeFormatter başlatmak: my sekmelerin sonra
aytf = PhoneNumberUtil.getInstance().getAsYouTypeFormatter(Locale.getDefault().getCountry());
ve bu tür oluşturulur, ben bir EditText kutusu oluşturmak, biçimlendirmek içindeki mevcut telefon numarası (hangisi çalışır) ve dinleyiciyi (mevcut sınıf olan) ekleyin:
O zaman bu benim TextWatcher işlevlerde anda ne var, benim kod olsa olmalıdır bu işlevlerden biri emin değilim: Burada
@Override
public void afterTextChanged(Editable s) {
if (!isInAfterTextChanged) {
isInAfterTextChanged = true;
if(s.length() > 0){
Log.v("AsYouTypeFormatter - source", s.toString());
for(int i = 0; i < s.length(); i++){
formattedPhoneNumber = aytf.inputDigit(s.charAt(i));
Log.v("AsYouTypeFormatter - formatted", formattedPhoneNumber);
}
Log.v("AsYouTypeFormatter - source after loop", s.toString());
//The formatted output shows properly in this EditText but not when I try to put it back into the original one (phoneNumberText)
EditText testPhoneNumberText = (EditText) phoneNumberView.findViewById(R.id.testPhoneNumberText);
testPhoneNumberText.setText(formattedPhoneNumber);
aytf.clear();
}
formattedPhoneNumber = null;
isInAfterTextChanged = false;
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
açmış bir örnek çıktı, bu yüzden biliyorum biçimlendirme çalışıyor:
01-03 10:55:02.838: V/AsYouTypeFormatter - source(27114): 15552451234
01-03 10:55:02.838: V/AsYouTypeFormatter - formatted(27114): 1
01-03 10:55:02.838: V/AsYouTypeFormatter - formatted(27114): 15
01-03 10:55:02.838: V/AsYouTypeFormatter - formatted(27114): 1 55
01-03 10:55:02.838: V/AsYouTypeFormatter - formatted(27114): 1 555
01-03 10:55:02.838: V/AsYouTypeFormatter - formatted(27114): 1 555-2
01-03 10:55:02.838: V/AsYouTypeFormatter - formatted(27114): 1 555-24
01-03 10:55:02.850: V/AsYouTypeFormatter - formatted(27114): 1 555-245
01-03 10:55:02.850: V/AsYouTypeFormatter - formatted(27114): 1 555-245-1
01-03 10:55:02.850: V/AsYouTypeFormatter - formatted(27114): 1 555-245-12
01-03 10:55:02.850: V/AsYouTypeFormatter - formatted(27114): 1 555-245-123
01-03 10:55:02.850: V/AsYouTypeFormatter - formatted(27114): 1 555-245-1234
01-03 10:55:02.850: V/AsYouTypeFormatter - source after loop(27114): 15552451234
ve burada çıkışın resimdir (üst EditText phoneNumberText ve alt testPhoneNumberText ise): http://imgur.com/GXwRu.png
Ya ben geri biçimlendirilmiş çıktı nasıl alabilirim olduğunu mu merak kökenine al Yazılı olarak EditText? Bunu yapmaya çalıştığımda, garip şeyler çoğaltma gibi oluyor ya da sadece biçimlenmemiş olduğunu gösteriyor. S.replace() kullanarak denedim ama düzgün kullanıyorum emin değilim. Mümkün mü? Teşekkürler? O zaman bu benim kodu değiştirmeden
private String unformattedPhoneNumber;
:
@Override
public void afterTextChanged(Editable s) {
if (!isInAfterTextChanged) {
isInAfterTextChanged = true;
if(s.length() > 0){
Log.v("AsYouTypeFormatter - source", s.toString());
unformattedPhoneNumber = s.toString().replaceAll("[^\\d.]", "");
for(int i = 0; i < unformattedPhoneNumber.length(); i++){
formattedPhoneNumber = aytf.inputDigit(unformattedPhoneNumber.charAt(i));
Log.v("AsYouTypeFormatter - formatted", formattedPhoneNumber);
}
Log.v("AsYouTypeFormatter - source after loop", s.toString());
phoneNumberText.setText(formattedPhoneNumber);
aytf.clear();
}
formattedPhoneNumber = null;
isInAfterTextChanged = false;
}
}
O aytf mümkün değildi görünüyor
sadece PhoneNumberFormattingTextWatcher kullanmayın Neden (Dize countryCode) ??? http://stackoverflow.com/a/29109236/1103584 – DiscDev
Bu minSdkVersion 21 gerektirir –