2010-05-31 11 views
8

Mam TextView z android:maxLength ustawionym na 3, a drugim z android:maxLength ustawionym na 7.Automatyczne ustawianie następnego widoku tekstowego:

Chcę, aby fokus automatycznie przełączał się na drugi TextView po wypełnieniu znaków 3 pierwszych 1.. Jak to osiągnąć bez dziedziczenia TextView i pisania niestandardowej implementacji?

Odpowiedz

6

Nie próbowałem, ale to może zadziałać.

konfiguracji słuchacz na ogień, gdy tekst został zmieniony, w tym wykorzystania

addTextChangedListener(TextWatcher watcher) 

Następnie na podstawie długości tekstu można wnioskować o zmianę ostrości do następnego pola.

Jeśli chcesz znaleźć następne pole, zadzwoń pod numer View.focusSearch(View.FOCUS_FORWARD) Znajdź najbliższy widok w określonym kierunku, który może skupić uwagę. To faktycznie nie koncentruje się na tym widoku.

+0

Zrobiłem to - public void onTextChanged (CharSequence s, int start, int przed, int count) { if (s.length() == 3) { Log.d (TAG, "Następny fokus to:" + tv1.getNextFocusDownId()); tv1.requestFocus (View.FOCUS_DOWN); } Ale to nie zadziałało - co robię źle? Dziennik prawidłowo drukuje komunikat, gdy długość wynosi 3, ale ostrość nie przechodzi automatycznie do następnego widoku. – Naseer

+0

Zignoruj ​​mój poprzedni komentarz - tv2.requestFocus() działał. Dzięki! – Naseer

+0

Widok.FOCUS_FORWARD nie jest dozwoloną wartością dla View.focusSearch. tylko prawdziwe kierunki. – dabluck

5

Dla przyszłych czytelników oczekujących na COPY/PASTE

int MAX_LENGTH = 3; 

txt1.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (s.length() == MAX_LENGTH) { 
      txt2.requestFocus(View.FOCUS_DOWN); 
     } 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
    } 
}); 
Powiązane problemy