2009-12-22 4 views
10

J'ai un TextView dans un ScrollView. Disons que le ScrollView est nommé s et que le TextView est nommé t.Faire défiler une TextView sur une ligne spécifique

J'ai beaucoup de lignes à afficher dans le TextView et en même temps je veux faire défiler la vue à une ligne spécifique.

Je l'ai fait:

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

Mais il ne défilera pas, sauf la deuxième fois. Il semble que la première fois que le code se termine, le ScrollView sait combien la hauteur totale du TextView est. Donc, je pense qu'il doit y avoir quelque chose à forcer à calculer la hauteur nécessaire avant l'appel scrollTo. Comment faire cela (ou autrement)?

+0

Exécutez-vous le code dans le thread d'interface utilisateur? – Tughi

+0

C'est le code de onReceiveResult (appelé une autre activité, l'activité met des données et finish(), et a reçu les données). Je ne comprends pas assez sur le modèle de filetage dans Android. – yuku

Répondre

20

trouvé la réponse here.

Au lieu d'appeler scrollTo directement, nous devons appeler post à la place sur le ScrollView. Cela marche.

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

Presque 2 ans plus tard .. Je pensais que c'était la même chose que de poster le code à un gestionnaire. Il s'avère que vous devez l'envoyer à la scrollview au lieu du gestionnaire. (le code ci-dessus est correct) – yuku

Questions connexes