web-dev-qa-db-fra.com

Comment faire défiler par programme une ScrollView vers le bas

J'ai un problème que je ne peux pas résoudre: dans un ScrollView, je n'ai qu'un LinearLayout. Par une action de l'utilisateur, j'ajoute par programme 2 TextView Sur ce LinearLayout, mais par défaut, le défilement reste en haut . Depuis que je contrôle l'action de l'utilisateur, je devrais être facile de faire défiler jusqu'au en bas avec quelque chose comme:

ScrollView scroll = (ScrollView) this.findViewById(R.id.scroll);
scroll.scrollTo(0, scroll.getBottom());

Mais en fait non. Car immédiatement après l’ajout de ces deux nouveaux éléments , GetBottom () renvoie toujours les deux précédents. J'ai essayé de Rafraîchir l'état en appelant refreshDrawableState(), mais je ne travaille pas.

Avez-vous une idée de comment obtenir le bas d'une ScrollView .__ après avoir ajouté des éléments?

37
wikier

Cela ne répond pas vraiment à votre question… .. Mais c'est une alternative qui fait à peu près la même chose.

Au lieu de faire défiler l'écran vers le bas, modifiez le focus pour une vue située au bas de l'écran. 

C'est, remplacer:

scroll.scrollTo(0, scroll.getBottom());

avec:

Footer.requestFocus();

Assurez-vous de spécifier que la vue, par exemple «Pied de page», peut être mise au point.

Android:focusable="true"
Android:focusableInTouchMode="true"
56
metalwihen

Vous devez faire le défilement sur un fil séparé, sinon cela ne fonctionnera pas. Essaye ça:

scrollView.post(new Runnable() {
    @Override
    public void run() {
        scrollView.fullScroll(ScrollView.FOCUS_DOWN);
    }
});

C'est ce qui a fonctionné pour moi.

86
SBerg413

ce sera ok

scrollView.post(new Runnable() {
    @Override

    public void run() {

        scroll.scrollTo(0, scroll.getBottom());

    }
});
17
sxk

Avez-vous essayé scroll.fullScroll(View.FOCUS_DOWN)?

3
Macondo2Seattle

vous pouvez appliquer cela aussi

 mScrollviewHomepage.setScrollY(View.FOCUS_DOWN);
0
Aalishan Ansari