Ci sono molte buone risposte qui, ma voglio solo aggiungere una cosa. A volte capita di voler scorrere ScrollView fino a una vista specifica del layout, invece di uno scorrimento completo verso l'alto o verso il basso.
Un semplice esempio: in un modulo di registrazione, se l'utente tocca il pulsante "Iscriviti" quando un testo di modifica del modulo non è compilato, si desidera scorrere fino a quel testo di modifica specifico per dire all'utente che deve riempire quel campo.
In tal caso, puoi fare qualcosa del genere:
scrollView.post(new Runnable() {
public void run() {
scrollView.scrollTo(0, editText.getBottom());
}
});
oppure, se si desidera uno scorrimento uniforme anziché uno scorrimento istantaneo:
scrollView.post(new Runnable() {
public void run() {
scrollView.smoothScrollTo(0, editText.getBottom());
}
});
Ovviamente puoi usare qualsiasi tipo di vista invece di Modifica testo. Si noti che getBottom () restituisce le coordinate della vista in base al layout principale, quindi tutte le viste utilizzate all'interno di ScrollView dovrebbero avere solo un padre (ad esempio un layout lineare).
Se hai più genitori all'interno del figlio di ScrollView, l'unica soluzione che ho trovato è chiamare requestChildFocus nella vista padre:
editText.getParent().requestChildFocus(editText, editText);
ma in questo caso non è possibile avere uno scorrimento regolare.
Spero che questa risposta possa aiutare qualcuno con lo stesso problema.
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });