2009-12-22 16 views
10

Ho un TextView all'interno di una ScrollView. Supponiamo che ScrollView sia denominato s e TextView sia denominato t.Scorrimento di una vista testo su una linea specifica

Ho molte righe da visualizzare in TextView e allo stesso tempo voglio scorrere la vista su una linea specifica.

Quindi ho fatto questo:

t.setText(aVeryLongString); 
int y = t.getLayout().getLineTop(40); // e.g. I want to scroll to line 40 
s.scrollTo(0, y); 

Ma non scorrere, tranne la seconda volta. Sembra che alla prima volta che il codice finisce, ScrollView sa quanto è l'altezza totale del TextView.

Quindi penso che ci deve essere qualcosa per forzare il calcolo dell'altezza necessaria prima della chiamata scrollTo. Come fare questo (o altro)?

+0

sono in esecuzione il codice nel thread UI? – Tughi

+0

È il codice su onReceiveResult (chiamato un'altra attività, l'attività inserisce alcuni dati e finisce() e riceve i dati). Non capisco abbastanza del modello di threading in Android. – yuku

risposta

20

Trovato la risposta here.

Invece di chiamare direttamente scrollTo, è necessario chiamare post invece su ScrollView. Questo funziona.

t.setText(aVeryLongString); 
s.post(new Runnable() { 
    @Override 
    public void run() { 
     int y = t.getLayout().getLineTop(40); // e.g. I want to scroll to line 40 
     s.scrollTo(0, y); 
    } 
}); 
+0

Quasi 2 anni dopo .. Ho pensato che fosse lo stesso di postare il codice a un gestore. Si scopre che è necessario pubblicarlo su scrollview anziché sul gestore. (il codice sopra è corretto) – yuku

Problemi correlati