2010-05-31 14 views
8

Ho un TextView con android:maxLength impostato su 3 e un altro con android:maxLength impostato su 7.Mettere a fuoco automaticamente la vista testo successiva

Voglio che la messa a fuoco si sposti automaticamente al secondo TextView una volta che i caratteri 3 del primo TextView sono stati riempiti. Come ottenere ciò senza ereditare TextView e scrivere un'implementazione personalizzata?

risposta

6

Non ho provato ma questo potrebbe funzionare.

Setup un ascoltatore al fuoco quando il testo è stato cambiato, per questo uso

addTextChangedListener(TextWatcher watcher) 

Poi in base alla lunghezza del testo è possibile richiedere il cambio di messa a fuoco al campo successivo.

Se si desidera trovare il campo successivo, è possibile chiamare View.focusSearch(View.FOCUS_FORWARD) Trovare la vista più vicina nella direzione specificata che può mettere a fuoco. Questo in realtà non si concentra su questa visione.

+0

ho fatto questo - public void OnTextChanged (CharSequence s, int start, int prima, int count) { se (s.length() == 3) { Log.d (TAG, "Il focus successivo è:" + tv1.getNextFocusDownId()); tv1.requestFocus (View.FOCUS_DOWN); Ma non ha funzionato - cosa sto sbagliando? Il registro stampa correttamente il messaggio quando la lunghezza è 3, ma lo stato attivo non passa automaticamente alla vista successiva. – Naseer

+0

Si prega di ignorare il mio commento precedente - tv2.requestFocus() ha funzionato. Grazie! – Naseer

+0

View.FOCUS_FORWARD non è un valore consentito per View.focusSearch. solo vere indicazioni. – dabluck

5

Per i lettori futuri prevedono di 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) { 
    } 
}); 
Problemi correlati