Il y a beaucoup de bonnes réponses ici, mais je veux seulement ajouter une chose. Il arrive parfois que vous souhaitiez faire défiler votre ScrollView vers une vue spécifique de la mise en page, au lieu d'un défilement complet vers le haut ou le bas.
Un exemple simple: dans un formulaire d'inscription, si l'utilisateur appuie sur le bouton "Inscription" alors qu'un texte d'édition du formulaire n'est pas rempli, vous voulez faire défiler jusqu'à ce texte d'édition spécifique pour indiquer à l'utilisateur qu'il doit remplir ce champ.
Dans ce cas, vous pouvez faire quelque chose comme ça:
scrollView.post(new Runnable() {
public void run() {
scrollView.scrollTo(0, editText.getBottom());
}
});
ou, si vous voulez un défilement fluide au lieu d'un défilement instantané:
scrollView.post(new Runnable() {
public void run() {
scrollView.smoothScrollTo(0, editText.getBottom());
}
});
Évidemment, vous pouvez utiliser n'importe quel type de vue au lieu de Modifier le texte. Notez que getBottom () renvoie les coordonnées de la vue en fonction de sa disposition parente, de sorte que toutes les vues utilisées à l'intérieur de ScrollView ne doivent avoir qu'un parent (par exemple une disposition linéaire).
Si vous avez plusieurs parents dans l'enfant du ScrollView, la seule solution que j'ai trouvée est d'appeler requestChildFocus sur la vue parent:
editText.getParent().requestChildFocus(editText, editText);
mais dans ce cas, vous ne pouvez pas avoir un défilement fluide.
J'espère que cette réponse peut aider quelqu'un avec le même problème.
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });