2012-03-08 17 views
5

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.

Odpowiedz

1

Niestety jest to błąd w klawiaturze HTC bez możliwości jego naprawy. Jest to zdarzenie w IME, nie można przechwycić zdarzeń dotykowych ani kluczowych, więc prawdopodobnie lepiej byłoby po prostu pozwolić użytkownikowi przejść do następnego wejścia, zamiast robić to za niego.

Jeśli jest to dla ciebie ważne, możesz zaimplementować tam własną klawiaturę, używając tylko tych kluczy, których potrzebujesz.

+0

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

2
 getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() { 
@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) {} 
    if(input.length() >3){ 
     getEditView(R.id.edit_code2).requestFocus(); 
@Override 
public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

@Override 
public void afterTextChanged(Editable input) { 

    } 
} 

});

+0

wszystkie 3 detektory zdarzeń, onTextChanged, beforeTextChanged, afterTextChanged są uruchamiane zaraz po naciśnięciu klawisza, ponieważ do editekstu dodawana jest litera. Problem polega na tym, że wdrożenie oprogramowania klawiatury nie czeka na zwolnienie klawisza przez użytkownika i wybranie numeru przed dodaniem go i wywołanie wszystkich detektorów zdarzeń – Jurriaanr

Powiązane problemy