Question

J'ai un TextView dans un ScrollView. Disons que le ScrollView est nommé s et le TextView est nommé t.

J'ai beaucoup de lignes à afficher dans la 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éfile pas, sauf la deuxième fois. Il semble que la première fois que le code se termine, le ScrollView sait à quel point la hauteur totale de la TextView.

Je pense donc qu'il doit y avoir quelque chose pour forcer le calcul de la hauteur nécessaire avant que l'appel scrollTo. Comment faire (ou autre)?

Était-ce utile?

La solution

.

Au lieu d'appeler directement scrollTo, nous devons appeler post plutôt sur le ScrollView. Cela fonctionne.

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);
    }
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top