web-dev-qa-db-fra.com

Comment faire défiler vers le bas une ScrollView au démarrage de l'activité

J'affiche des données dans un ScrollView. Au démarrage de l’activité (méthode onCreate), je remplis le ScrollView avec des données et je souhaite faire défiler vers le bas.

J'ai essayé d'utiliser getScrollView().fullScroll(ScrollView.FOCUS_DOWN). Cela fonctionne lorsque je le fais comme une action sur un clic sur un bouton mais cela ne fonctionne pas dans la méthode onCreate.

Existe-t-il un moyen de faire défiler ScrollView vers le bas au démarrage de l'activité? Cela signifie que la vue est déjà défilée vers le bas lors de la première utilisation.

94
Palo

Cela doit être fait comme suit:

    getScrollView().post(new Runnable() {

        @Override
        public void run() {
            getScrollView().fullScroll(ScrollView.FOCUS_DOWN);
        }
    });

De cette façon, la vue est d'abord mise à jour, puis défile jusqu'au "nouveau" fond.

210
Palo

Mettez le code suivant après l'ajout de vos données:

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview));
scrollview.post(new Runnable() {
    @Override
    public void run() {
        scrollview.fullScroll(ScrollView.FOCUS_DOWN);
    }
});
46
Harshid

Cela fonctionne pour moi:

scrollview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        scrollview.post(new Runnable() {
            public void run() {
                scrollview.fullScroll(View.FOCUS_DOWN);
            }
        });
    }
});
28
sonida

Vous pouvez le faire dans un fichier de mise en page:

                Android:id="@+id/listViewContent"
                Android:layout_width="wrap_content"
                Android:layout_height="381dp" 
                Android:stackFromBottom="true"
                Android:transcriptMode="alwaysScroll">
17
Tam Dao
 scrollView.postDelayed(new Runnable() {
        @Override
        public void run() {
            scrollView.fullScroll(ScrollView.FOCUS_DOWN);
        }
    },1000);
8
Makvin

Juste après avoir ajouté des données à la vue, ajoutez cette ligne unique:

yourScrollview.fullScroll(ScrollView.FOCUS_DOWN);
3
LEMUEL ADANE

Essaye ça

    final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview));
    scrollview.post(new Runnable() {
       @Override
       public void run() {
         scrollview.fullScroll(ScrollView.FOCUS_DOWN);
       }
    });
3
F.O.O

Après l’initialisation de votre composant d’interface utilisateur, remplissez-le avec les données. ajoutez ces lignes à votre méthode de création

Runnable runnable=new Runnable() {
        @Override
        public void run() {
            scrollView.fullScroll(ScrollView.FOCUS_DOWN);
        }
    };
    scrollView.post(runnable);
1
Ramzy Hassan

C'est la meilleure façon de faire cela.

scrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            scrollView.post(new Runnable() {
                @Override
                public void run() {
                    scrollView.fullScroll(View.FOCUS_DOWN);
                }
            });
        }
});
1
rana