Mam 3 elementy EditText i chcę przeskakiwać z jednego pola do drugiego, jeśli na wejściu są 4 znaki.Liczenie znaków z TextWatcherem kończy się niepowodzeniem na HTC longpress
używam TextWatcher na to:
getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void afterTextChanged(Editable input) {
if(input.length() == 4){
getEditView(R.id.edit_code2).requestFocus();
}
}
});
InputType dla EditText jest "textCapCharacters"
Podczas longpress na klucz, aby uzyskać numer, jak trzymając R, aby uzyskać 4 , większość urządzeń nie doda litery, dopóki użytkownik nie zatrzyma przycisku i uruchomi AfterTextChanged po wybraniu litery 4. Na klawiaturze HTC (w tym przypadku HTC Desire na 2.3.5) tak nie jest. Nawet jeśli użytkownik nadal trzyma przycisk, R jest dodawany do EditText, a afterTextChanged jest uruchamiany, a kod wykonuje swoje zadanie i ustawia fokus na następne pole.
Jak można zapobiec niepożądanym zachowaniom? Oglądanie onKeyDown/Up nie pomoże, ponieważ nie rejestruje normalnych naciśnięć klawiszy.
To, czego się obawiałem, dziękuję, opuści wybór dla klienta. Na klawiaturach HTC zawsze możliwe jest użycie wprowadzania liczbowego zamiast długiego naciśnięcia. – Jurriaanr